<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      一個(gè)簡(jiǎn)單的.net寫日志方法 - 可能的改進(jìn)點(diǎn)

      昨天有個(gè)朋友在評(píng)論的時(shí)候問(wèn)我如下代碼在web開發(fā)中有什么問(wèn)題

      public void Log(string msg)
      {
      System.IO.File.AppendAllText(Server.MapPath("~/log.txt"), msg);
      }

      這里能說(shuō)的點(diǎn)太多了....只好新開一個(gè)文章來(lái)說(shuō),而且也只是選重點(diǎn)的說(shuō)

       

      功能

      1.線程不安全

        asp.net是原生的多線程的框架,那么日志類必須是多線程安全的, 該類庫(kù)內(nèi)部使用了File類來(lái)附加日志,而這個(gè)部分不是線程安全的,這里有一個(gè)BUG (windows資源.例如網(wǎng)絡(luò) 文件 在asp.net中都要注意多線程同步)

        改進(jìn)方案:最最簡(jiǎn)單的辦法是加lock,(其他的改進(jìn)方案之后再提)

      2.方法未做輸入檢查

        所有public的輸入?yún)?shù) 要做輸入值檢查,如果是null或者是empty,那么就不要再調(diào)用File類寫日志, 這樣會(huì)有性能和健壯性上的提高(最常見的問(wèn)題就是未將對(duì)象引用到設(shè)置對(duì)象的實(shí)例)

        解決方案:做輸入值檢查

      3. IIS默認(rèn)帳號(hào)對(duì)于 Server.MapPath("~/log.txt") 這個(gè)路徑是沒有寫入/修改權(quán)限的 (可能在生產(chǎn)環(huán)境你才會(huì)發(fā)現(xiàn)這個(gè)問(wèn)題)

        解決方案:配置IIS帳號(hào)權(quán)限,或者是配置一個(gè)有權(quán)限的目錄 (推薦后者)

      4.未做try catch( 是否需要try catch,要考慮實(shí)際情況)

        一般來(lái)說(shuō)寫日志的方法是不會(huì)拋出異常的,如果沒有catch( 可以在內(nèi)部 也可以在外部catch,我個(gè)人推薦外部) 會(huì)導(dǎo)致程序/邏輯中止

        絕對(duì)要避免日志這樣的非核心邏輯 導(dǎo)致業(yè)務(wù)邏輯的中止

      安全性

      1.將日志寫入網(wǎng)站根目錄是一種高風(fēng)險(xiǎn)的行為,第一是需要額外的權(quán)限,第二是有可能存在寫入程序文件(例如有些人寫入aspx文件)

        解決方案:配置一個(gè)網(wǎng)站根目錄外的日志目錄

      性能

      1.采用異步寫入的方式提高性能

        即 寫入隊(duì)列,定時(shí)刷新隊(duì)列到數(shù)據(jù)文件; 由于寫入的瓶頸一般在IO上,這樣的話性能會(huì)好很多;當(dāng)然,如果忽然斷電,就有可能丟失數(shù)據(jù) (小概率事件,我們考慮性能多過(guò)這一點(diǎn)小瑕疵)

        這也是我最喜歡的方式,但是該方式需要開發(fā)人員有較高的水平,而且方案復(fù)雜,開發(fā)時(shí)間長(zhǎng)...唯一的好處就是性能高....寫日志響應(yīng)時(shí)間短

      2.采用其他的寫日志的方式

        例如CLFS windows2008開始支持common log file system,

        如果不是windows 2008 直接打開一個(gè)FileStream 然后保存在本地變量中會(huì)更好, 不要每寫一條日志都打開文件又關(guān)閉

      3.將實(shí)例方法替換為靜態(tài)方法(或者至少使用call而不是callvirt來(lái)調(diào)用方法)  [具體使用具體分析]

      擴(kuò)展性和可維護(hù)性

      1.日志路徑不應(yīng)該是寫死的Server.MapPath("~/log.txt")  這樣這個(gè)日志只能被web程序使用,而不能被windows form 或者服務(wù)器應(yīng)用程序等其他應(yīng)用程序使用

      2.日志路徑不應(yīng)該寫死,而是應(yīng)該可配置,至少應(yīng)該有一個(gè)獨(dú)立的成員存儲(chǔ)(可預(yù)期寫日志的方法必然有非常多的重載)

      3.日志類這種基本類庫(kù)一般使用靜態(tài)方法, 好歹不要每次使用都new一個(gè) [具體使用具體分析]

      4.有可能的話,第三方類庫(kù),例如log4net是一個(gè)比較好的方案

      5.如果是生產(chǎn)環(huán)境的代碼,這個(gè)命名還有注釋都是完全不合格的..

      6.不推薦使用完整的命名空間 (文本太多...煩 哈哈)

       

      就一個(gè)寫日志的方法,我們做設(shè)計(jì)的時(shí)候,總是要考慮:(優(yōu)先級(jí)和項(xiàng)目類型有關(guān))

      1.團(tuán)隊(duì)能否有足夠的能力完成 

      2.開發(fā)時(shí)間

      3.復(fù)雜程度 (導(dǎo)致維護(hù)成本上升)

      4.程序穩(wěn)定性

      5.性能 

      6.目前已經(jīng)存在的技術(shù)體系和類庫(kù). (復(fù)用性啊什么的...)

      7.其他的和一時(shí)想不起來(lái)的因素(例如大老板說(shuō)要這么做......好吧 你是老板你說(shuō)了算 哈哈  just kidding) 

       

      可能考慮的還不夠全面,畢竟時(shí)間有限...最近太忙了

      如有遺漏 還請(qǐng)各位幫忙補(bǔ)充下

       

      具體的代碼就不提供了, 一般我們做日志都是公司級(jí)的日志, 所有的服務(wù)器會(huì)通過(guò)網(wǎng)絡(luò)傳輸?shù)饺罩炯悍?wù)器, 這和簡(jiǎn)單的文件日志是完全不一樣的體系

      簡(jiǎn)單的文件日志,我們也會(huì)用很簡(jiǎn)單方式來(lái)寫入.....(在某些項(xiàng)目中,最簡(jiǎn)單就是最適合,)

      項(xiàng)目類型和開發(fā)時(shí)間需要, 稍微復(fù)雜點(diǎn)的我們會(huì)用log4net之類的第三方日志庫(kù)來(lái)做

      最簡(jiǎn)單的日志也許幾分鐘就寫好了, 最復(fù)雜的日志做了幾個(gè)月才是一個(gè)架子.......

      posted on 2012-05-21 12:32  聽說(shuō)讀寫  閱讀(8158)  評(píng)論(2)    收藏  舉報(bào)

      導(dǎo)航

      主站蜘蛛池模板: 熟女亚洲综合精品伊人久久| 欧美国产精品不卡在线观看| 亚洲av男人电影天堂热app| 欧洲亚洲成av人片天堂网| 国产精品日日摸夜夜添夜夜添无码| 加勒比精品一区二区三区| 一区二区和激情视频| 午夜国产精品福利一二| 精品国产一区二区亚洲人| 在线中文字幕国产一区| 蜜臀久久99精品久久久久久| 国产亚洲欧美日韩俺去了| 国产精品久久久久7777| 久久精品国产亚洲夜色av网站| 97se亚洲国产综合自在线观看 | 国产三级精品三级在线看| 兴文县| 蜜臀91精品国产高清在线| 国产真实伦在线观看视频| 久久综合97丁香色香蕉| 狠狠躁天天躁中文字幕无码| 亚洲免费成人av一区| 久久婷婷成人综合色综合| 国产中文字幕精品视频| 日韩人妻一区中文字幕| 中文字幕无线码中文字幕免费| 超碰成人精品一区二区三| 婷婷色综合成人成人网小说| 亚洲老妇女亚洲老熟女久| 国产性色av高清在线观看 | 亚洲精品不卡无码福利在线观看| 精品久久久久久无码不卡| 日本成人午夜一区二区三区| 97在线碰| 日韩老熟女av搜索结果| 久久综合亚洲色一区二区三区| 岳阳县| 国产精品日日摸夜夜添夜夜添无码| 国产不卡精品视频男人的天堂| 国产精品国产三级国产a| AV无码不卡一区二区三区|