targets:輸出目標節點
target:配置一個輸出目標
Type輸出類型:
- Console 輸出到控制台
- Debugger 輸出到VS輸出窗口
- File 輸出到文件
- Mail 輸出為郵件發送
- Network 輸出到網絡地址
- Database 輸出到數據庫

<targets async=” Boolean”> //是否異步 <target xsi:type="File" //輸出類型 name="String" //節點名稱 layout="Layout" //日志輸入格式 header="Layout" //日志頭顯示的文本內容 footer="Layout" //日志尾顯示的文本內容 encoding="Encoding" //文件編碼格式 lineEnding="Enum" //行結束模式 archiveAboveSize="Long" //存檔上限值 maxArchiveFiles="Integer" //保存的最大存檔文件數,默認9 archiveFileName="Layout" //存檔文件名稱。允許使用Layout archiveNumbering="Enum" //存檔文件的編號方式 archiveEvery="Enum" //是否在每個設定時間刻自動存檔日志文件 replaceFileContentsOnEachWrite="Boolean" //是否覆蓋每次寫入的日志內容,默認false fileAttributes="Enum" //文件屬性(只支持Windows) fileName="Layout" //寫入日志的文件名稱 支持Layout deleteOldFileOnStartup="Boolean" //啟動時,是否刪除舊的日志文件 。默認為false enableFileDelete="Boolean" //否允許刪除日志文件。默認為true createDirs="Boolean" //是否允許自動創建(不存在的)目錄。默認為true。 concurrentWrites="Boolean" //是否允許使用通過多個進程的方式,將日志信息並行寫入文件中。,默認為true openFileCacheTimeout="Integer" //文件保持打開狀態的最大時間秒數 openFileCacheSize="Integer" //保持打開狀態的文件數量 networkWrites="Boolean" //是否通過多線程由不同的網絡主機並行向文件中寫入日志默認false concurrentWriteAttemptDelay="Integer" concurrentWriteAttempts="Integer" bufferSize="Integer" //日志文件緩存區大小(字節) 默認值為32768(32KB) autoFlush="Boolean" //在每次日志信息后,是否自動刷新文件緩存區 默認true keepFileOpen="Boolean" //是否保持日志文件處於打開狀態,以代替其在每次日志寫事件發生時頻繁打開和關閉默認值為false。 備注:設置此屬性為true,有助於提高性能。 /> </targets>
具體參數說明:
layout – 日志呈現的文本內容。默認為:
${longdate}|${level:uppercase=true}|${logger}|${message}
lineEnding – 行結束模式。
可選值:
- CR – 在每尾部插入回車符號(ASCII 13)。
- CRLF – 在每行尾部插入回車和換行符號(ASCII 13 & ASCII 10)。
- Default – 在每行尾部插入平台相關的行結束符號(默認)。
- LF - 在每行尾部插入換行符號(ASCII 10)。
- None – 不插入任何行結束符號。
archiveAboveSize – 存檔上限值。當日志文件大於此值是,將自動存檔。其類型為Long。
注意:在多進程並發記錄日志的情況下,啟用該選項可能會大幅降低日志記錄速度。在單進程時,為了達到最佳性能,可以考慮設置ConcurrentWrites為false。
archiveEvery – 是否在每個設定時間刻自動存檔日志文件。
可選值:
- Day – 每日存檔。
- Hour – 每小時存檔。
- Minute – 每分鍾存檔。
- Month – 每月存檔。
- None – 不按時間固定存檔。
- Year – 每年存檔。
備注:作為寫日志的一部分,文件移動到存檔位置的操作發生的時間變換時刻。例如,當前時間從10點變至11點,則當在寫第11點或11點之后的第一個寫操作時,觸發日志文件歸 檔。
注意:在多進程並發記錄日志的情況下,啟用該選項可能會大幅降低日志記錄速度。在單進程時,為了達到最佳性能,可以考慮設置ConcurrentWrites為false。
filename – 寫入日志的文件名稱。支持Layout。
備注:文件名字符串中可能包含布局呈現器中的實例變量。這樣可以通過配置單個目標節點,而將日志寫入多個文件中。
以下fileName屬性值將使得NLog在應用程序啟動目錄下,根據日志級別不同,將日志信息寫到不同的文件中。
${basedir}/${level}.log
因此,所有的Debug級別日志寫入到Debug.log文件中,所有的Info級別日志寫入到Info.log文件中,其它以此類推。同時,也可以結合其它布局呈現器實例,組成所要的日志文件名稱。
deleteOldFileOnStartUp – 啟動時,是否刪除舊的日志文件。其取值類型為Boolean,默認為false。
備注:此選項,僅在“fileName”參數為單個文件時有效。
性能優化選項
concurrentWirtes – 是否允許使用通過多個進程的方式,將日志信息並行寫入文件中。其取值類型為Boolean,默認為true。
備注:這使得多進程記錄日志成為可能。NLog使用一種特別的技術使用文件保持打開狀態以備寫入。
openFileCacheTimeout – 文件保持打開狀態的最大時間秒數。如果這個數字為負數,則在一定不活動時間后,文件不會自動關閉。其取值類型為Integer,默認值為-1。(即默 認狀態下文件始終處於打開狀態以備寫入。)
openFileCacheSize – 保持打開狀態的文件數量。當通過設置單個文件類型目標,且結果寫入多個不同文件(如根據日志等級或日志對象名稱)時,則可將此屬性設置為一個較 高的值以改善性能。其取值類型為Integer,默認值為5。
備注:這些文件是在最近最少使用算法基礎管理的,此算法在緩存空間不足時將最長時間內沒有使用的文件Flush。一般來說,不應當把此參數設置過大,最好不要超過10-15,這是因同時保持多個文件處於打開狀態,對系統資源來說是一個很大的消耗。
networkWrites – 是否通過多線程由不同的網絡主機並行向文件中寫入日志。其取值類型為Boolean,默認值為false。
備注:通過此此種方式,可以有效阻止文件長期保存為打開狀態。
concurrentWriteAttemptDelay – 在再次嘗試將日志寫入文件之前延遲的毫秒數。其取值類型為Integer,默認值為1。
備注:實際的延遲時間,是一個介於0到指定參數值之間的隨機整數,且在每次嘗試失敗之后,都會將此參數加倍。假使此參數值為10,則第一次重試寫入 的延遲時間(毫秒數)在 0-10之間的一個隨機數,第二次重試時為0-20之間的一個隨機數,第三次重試時為0-40之間的一個隨機數,第四次重試時為0-80之間的一個隨機數 等等,以此類推。
concurrentWriteAttempts – 在NLog丟棄日志信息之前的追加(嘗試重寫)寫次數。其取值類型為Integer,默認值為10。
bufferSize – 日志文件緩存區大小(單位:字節)。其取值類型為Integer,默認值為32768(32KB)。
autoFlush – 在每次日志信息后,是否自動刷新文件緩存區。其取值類型為Boolean,默認值為true。
keepFileOpen – 是否保持日志文件處於打開狀態,以代替其在每次日志寫事件發生時頻繁打開和關閉。其取值類型為Boolean,默認值為false。
備注:設置此屬性為true,有助於提高性能。