Nlog-File輸出配置


屬性解釋

 <target xsi:type="File"
          name="String"
          layout="Layout"
          header="Layout"
          footer="Layout"
          encoding="Encoding"
          lineEnding="Enum"
          archiveAboveSize="Long"
          maxArchiveFiles="Integer"
          maxArchiveDays="Integer"
          archiveFileName="Layout"
          archiveNumbering="Enum"
          archiveDateFormat="String"
          archiveEvery="Enum"          
          archiveOldFileOnStartup="Boolean"
          archiveOldFileOnStartupAboveSize="Long"
          replaceFileContentsOnEachWrite="Boolean"
          fileAttributes="Enum"
          fileName="Layout"
          deleteOldFileOnStartup="Boolean"
          enableFileDelete="Boolean"
          createDirs="Boolean"
          concurrentWrites="Boolean"
          openFileFlushTimeout="Integer"
          openFileCacheTimeout="Integer"
          openFileCacheSize="Integer"
          networkWrites="Boolean"
          concurrentWriteAttemptDelay="Integer"
          concurrentWriteAttempts="Integer"
          bufferSize="Integer"
          autoFlush="Boolean"
          keepFileOpen="Boolean"
          forceManaged="Boolean"
          enableArchiveFileCompression="Boolean"
          cleanupFileName="Boolean"
          writeFooterOnArchivingOnly="Boolean"
          writeBom="Boolean" />

看着是不是很不舒服,接下來我們對file的屬性一個個進行講解

name:輸出配置名稱,可以自己定義,隨便寫

layout:日志的格式模板 自定義,里面的變量可以參考官方文檔

header:頭部格式

footer:腳部格式

encoding:編碼格式,可以是utf-8或者其他字符集

lineEnding:行結束模式

  • CR - 在每行后插入 CR 字符 (ASCII 13)。
  • CRLF - 在每行之后插入 CR LF 序列(ASCII 13、ASCII 10)
  • 默認 - 在每行之后插入依賴於平台的行尾序列。
  • LF - 在每行后插入 LF 字符 (ASCII 10)。
  • 無 - 不插入任何行尾。

這個是官方給的解釋及參考值

archiveAboveSize:以字節為單位的大小,超過該大小的日志文件將被自動存檔

maxArchiveFiles:應保留的最大存檔文件數。如果maxArchiveFiles小於或等於 0,則不刪除舊文件

maxArchiveDays: 應保留的存檔文件的最長期限。當archiveNumbering為時無效Rolling。如果maxArchiveDays小於或等於 0,則不刪除舊文件

archiveFileName:要用於存檔的文件的名稱 可以指定日志,具體參考官方文檔

archiveNumbering:對文件檔案進行編號的方式

archiveDateFormat:指定用於存檔編號的日期格式。此選項僅在“ArchiveNumbering”參數設置為 Date 或 DateAndSequence 時有效

  • 默認: yyyyMMdd
  • ArchiveEvery = 分鍾時的默認值: yyyyMMddHHmm
  • ArchiveEvery = 小時時的默認值: yyyyMMddHH
  • ArchiveEvery = Month 時的默認值: yyyyMM
  • ArchiveEvery = Year 時的默認值: yyyy

archiveEvery:指示是否在每次經過指定時間時自動歸檔日志文件

  • 日 - 每天存檔。
  • 小時 - 每小時存檔一次。
  • 分鍾 - 每分鍾存檔一次。
  • 月 - 每月存檔。
  • 無 - 不要根據時間存檔。
  • 年 - 每年存檔。
  • 星期日 - 每個星期日存檔。在 NLog 4.4.4 中引入。
  • 星期一 - 每周一存檔。在 NLog 4.4.4 中引入。
  • 星期二 - 每個星期二存檔。在 NLog 4.4.4 中引入。
  • 星期三 - 每周三存檔。在 NLog 4.4.4 中引入。
  • 星期四 - 每個星期四存檔。在 NLog 4.4.4 中引入。
  • 星期五 - 每星期五存檔。在 NLog 4.4.4 中引入。
  • 星期六 - 每星期六存檔。在 NLog 4.4.4 中引入。

如果當前時間段發生變化,文件將作為寫入操作的一部分移動到存檔中。例如,如果當前小時從 10 點更改為 11 點,則在 11:00 或之后發生的第一次寫入將觸發

archiveOldFileOnStartup:在啟動時存檔舊日志文件

archiveOldFileOnStartupAboveSize:啟動時存檔舊日志文件的文件大小閾值。默認值為 0,這意味着一旦啟用archiveOldFileOnStartup就會歸檔文件。在 NLog 4.7 中引入

replaceFileContentsOnEachWrite:指示是否在每次寫入時替換文件內容,而不是在末尾附加日志消息

fileAttributes:文件屬性(僅限 Windows)

  • 存檔 - 文件應該被存檔。
  • 壓縮的- 由於 .Net 限制,壓縮將不起作用。您可以使用 enableArchiveFileCompression。
  • DeleteOnClose - 關閉文件后刪除文件。
  • 設備 - 設備文件。
  • 加密 - 加密文件。
  • 隱藏 - 隱藏文件。
  • NoBuffering - 系統打開一個沒有系統緩存的文件。
  • 普通 - 普通文件。
  • NotContentIndexed - 內容索引服務不應為文件編制索引。
  • PosixSemantics - 根據 POSIX 規則訪問文件。
  • 只讀 - 只讀
  • ReadOnly - 只讀文件。
  • ReparsePoint - 重新解析點。
  • SparseFile - 稀疏文件。
  • 系統 - 系統文件。
  • 臨時 - 文件是臨時的(應該保存在緩存中,如果可能的話不要寫入磁盤)。
  • WriteThrough - 系統通過任何中間緩存寫入並直接進入磁盤。

fileName:要寫入的文件的名稱

deleteOldFileOnStartup: 指示是否在啟動時刪除舊日志文件,此選項僅在“FileName”參數表示單個文件時有效。

enableFileDelete:指示是否啟用刪除日志文件

createDirs:是否創建不存在的目錄

keepFileOpen:指示是否在每次記錄事件時保持日志文件打開,將此屬性更改為 true 將大大提高性能,但也會保持文件句柄鎖定。啟用此選項時,請考慮設置openFileCacheTimeout = 30,因為它將允許存檔操作並對被刪除的日志文件做出反應。

concurrentWrites:當使用keepFileOpen = true時,支持同一機器主機上的多個進程優化並發寫入同一日志文件。通過使用一種特殊的技術,它可以讓文件從多個進程中打開。如果只有單個進程(和單個 AppDomain)應用程序正在記錄日志,那么設置為concurrentWrites = False會更快。

openFileCacheTimeout:文件保持打開的最大秒數。如果此數字為負數,則文件在一段時間不活動后不會自動關閉

openFileCacheSize:要保持打開的文件數。在單個 File 目標寫入多個文件(例如按級別或按記錄器拆分)的情況下,將此設置為更高的值可能會提高性能

openFileFlushTimeout:顯式刷新文件緩沖區之間的秒數。有助於確保文件緩沖區在autoFlush = false時最終被刷新

networkWrites:指示是否由不同網絡主機上的多個進程並發寫入日志文件。

concurrentWriteAttemptDelay:在嘗試再次寫入文件之前等待的延遲(以毫秒為單位)。整數默認值:1
實際延遲是一個介於 0 和此參數中指定的值之間的隨機值。在每次失敗的嘗試中,延遲基數加倍為 ConcurrentWriteAttempts 次。

concurrentWriteAttempts:在 NLog 丟棄日志消息之前嘗試寫入文件的次數

bufferSize:以字節為單位的日志文件緩沖區大小。整數默認值:32768

autoFlush: 指示是否在每條日志消息后自動刷新文件緩沖區,禁用它會提高性能

forceManaged:指示文件目標應僅使用托管方法。這會禁用某些選項

enableArchiveFileCompression:指示是否將存檔文件壓縮為 zip 文件

cleanupFileName:在寫入文件之前,檢查文件名是否包含非法字符(取決於操作系統)。如果寫入大量消息,這可能代價高昂。清理緩存為固定名稱(無布局渲染器)。將此設置false為最佳性能(但要注意文件名,如果錯誤,則不會寫入任何內容)

writeFooterOnArchivingOnly:指示是否應僅在歸檔文件時寫入頁腳

writeBom:指示是否在創建的文件中寫入 BOM(字節順序標記)

 

JSON/xml Log-file

Nlog不光能記錄普通的log文件,還可以記錄json格式的問題

<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
        <target name="jsonfile" xsi:type="File" fileName="${basedir}/file.json">
            <layout xsi:type="JsonLayout">
                <attribute name="time" layout="${date:format=O}" />
                <attribute name="message" layout="${message}" />
                <attribute name="logger" layout="${logger}"/>
                <attribute name="level" layout="${level}"/>
            </layout>
        </target>
    </targets>
 
    <rules>
        <logger name="*" minlevel="Debug" writeTo="jsonfile" />
    </rules>
</nlog>

 

可以記錄xml格式的文件呢

 

<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
        <target name="csvfile" xsi:type="File" fileName="${basedir}/file.csv">
            <layout xsi:type="CSVLayout">
                <column name="time" layout="${longdate}" />
                <column name="message" layout="${message}" />
                <column name="logger" layout="${logger}"/>
                <column name="level" layout="${level}"/>
            </layout>
        </target>
    </targets>
 
    <rules>
        <logger name="*" minlevel="Debug" writeTo="csvfile" />
    </rules>
</nlog>

 

示例

那我們開始一個個進行嘗試,看看效果

 

 

<?xml version="1.0" encoding="utf-8" ?>
<!-- XSD manual extracted from package NLog.Schema: https://www.nuget.org/packages/NLog.Schema-->
<nlog
   xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   autoReload="true"
   internalLogFile="c:\temp\console-example-internal.log"
   internalLogLevel="Info"
  >
  <targets>
    <target
      xsi:type="ColoredConsole"
      name="colorConsole"
      encoding="Encoding"
      detectConsoleAvailable="true"
      detectOutputRedirected="false" 
      useDefaultRowHighlightingRules="false"
      header="--------------------"
       layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception} ${newline} ${stacktrace} ${newline}"
      footer="---------------------"
      >
      <highlight-row condition="level == LogLevel.Trace" backgroundColor="White" foregroundColor="DarkGray"/>
      <highlight-row condition="level == LogLevel.Debug" backgroundColor="White" foregroundColor="DarkBlue"/>
      <highlight-row condition="level == LogLevel.Info" backgroundColor="Green" foregroundColor="White"/>
      <highlight-row condition="level == LogLevel.Warn" backgroundColor="Magenta" foregroundColor="DarkYellow"/>
      <highlight-row condition="level == LogLevel.Error" backgroundColor="Gray" foregroundColor="Red"/>
      <highlight-row condition="level == LogLevel.Fatal" backgroundColor="Gray" foregroundColor="DarkRed"/> 
    </target>
  <target
  xsi:type="File"
  name="myfile"
  fileName="${basedir}/logs/${level:uppercase=true}.${shortdate}.log"
  createDirs="true"
  layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=ToString} ${newline} ${stacktrace} ${newline}"
  header="-------"
  footer="--------"
  encoding="utf-8"
  lineEnding="CRLF"
  keepFileOpen="true"
  concurrentWrites="false"
  openFileCacheTimeout="30"
  openFileCacheSize="6"
  openFileFlushTimeout="10"
  autoFlush="false"
  cleanupFileName="false"
  archiveAboveSize="10000"
  maxArchiveFiles="10"
  maxArchiveDays="10"
  archiveFileName="archive.${level:uppercase=true}.{#}.log"
  archiveNumbering="Date"
  archiveEvery="Month"
  archiveOldFileOnStartup="false"
  archiveOldFileOnStartupAboveSize="0"
  replaceFileContentsOnEachWrite="false"
  enableFileDelete="true"
  concurrentWriteAttempts="20000"
  networkWrites="false"
  />
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="colorConsole,myfile" />
  </rules>
</nlog>

 

 

 

嗯,確實很棒,速度很快,很方便

 

下面我們試一下json文件,然后我們換個目錄看看效果

<?xml version="1.0" encoding="utf-8" ?>
<!-- XSD manual extracted from package NLog.Schema: https://www.nuget.org/packages/NLog.Schema-->
<nlog
   xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   autoReload="true"
   internalLogFile="c:\temp\console-example-internal.log"
   internalLogLevel="Info"
  >
  <targets>
    <target
      xsi:type="ColoredConsole"
      name="colorConsole"
      encoding="Encoding"
      detectConsoleAvailable="true"
      detectOutputRedirected="false" 
      useDefaultRowHighlightingRules="false"
      header="--------------------"
       layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception} ${newline} ${stacktrace} ${newline}"
      footer="---------------------"
      >
      <highlight-row condition="level == LogLevel.Trace" backgroundColor="White" foregroundColor="DarkGray"/>
      <highlight-row condition="level == LogLevel.Debug" backgroundColor="White" foregroundColor="DarkBlue"/>
      <highlight-row condition="level == LogLevel.Info" backgroundColor="Green" foregroundColor="White"/>
      <highlight-row condition="level == LogLevel.Warn" backgroundColor="Magenta" foregroundColor="DarkYellow"/>
      <highlight-row condition="level == LogLevel.Error" backgroundColor="Gray" foregroundColor="Red"/>
      <highlight-row condition="level == LogLevel.Fatal" backgroundColor="Gray" foregroundColor="DarkRed"/> 
    </target>
  <target
  xsi:type="File"
  name="myfile"
  fileName="${basedir}/logs/${level:uppercase=true}.${shortdate}.log"
  createDirs="true"
  layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception:format=ToString} ${newline} ${stacktrace} ${newline}"
  header="-------"
  footer="--------"
  encoding="utf-8"
  lineEnding="CRLF"
  keepFileOpen="true"
  concurrentWrites="false"
  openFileCacheTimeout="30"
  openFileCacheSize="6"
  openFileFlushTimeout="10"
  autoFlush="false"
  cleanupFileName="false"
  archiveAboveSize="10000"
  maxArchiveFiles="10"
  maxArchiveDays="10"
  archiveFileName="archive.${level:uppercase=true}.{#}.log"
  archiveNumbering="Date"
  archiveEvery="Month"
  archiveOldFileOnStartup="false"
  archiveOldFileOnStartupAboveSize="0"
  replaceFileContentsOnEachWrite="false"
  enableFileDelete="true"
  concurrentWriteAttempts="20000"
  networkWrites="false"
  />
    <target
  xsi:type="File"
  name="myjsonfile"
  fileName="${basedir}/jsonlogs/${level:uppercase=true}.${shortdate}.json"
  createDirs="true"
  encoding="utf-8"
  lineEnding="CRLF"
  keepFileOpen="true"
  concurrentWrites="false"
  openFileCacheTimeout="30"
  openFileCacheSize="6"
  openFileFlushTimeout="10"
  autoFlush="false"
  cleanupFileName="false"
  archiveAboveSize="10000"
  maxArchiveFiles="10"
  maxArchiveDays="10"
  archiveFileName="archive.${level:uppercase=true}.{#}.log"
  archiveNumbering="Date"
  archiveEvery="Month"
  archiveOldFileOnStartup="false"
  archiveOldFileOnStartupAboveSize="0"
  replaceFileContentsOnEachWrite="false"
  enableFileDelete="true"
  concurrentWriteAttempts="20000"
  networkWrites="false"
  >
      <layout xsi:type="JsonLayout">
        <attribute name="time" layout="${longdate:format=O}" />
      <attribute name="message" layout="${message}" />
      <attribute name="logger" layout="${logger}"/>
      <attribute name="level" layout="${level}"/>
       <attribute name="exception" layout="${exception:format=ToString}"/>
      <attribute name="stacktrace" layout="${stacktrace}"/>
      </layout>
  </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="colorConsole,myfile,myjsonfile" />
  </rules>
</nlog>

 

 

 

效果依舊非常棒!

xml我們就不做測試了,本章完畢,點個關注唄,你們的關注是longyan的強大動力


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM