你在log4net配置中有什么?黑客,优化,观察?

Che*_*ian 17 .net optimization logging log4net

这是我的log4net配置文件

<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="DEBUG" />
      <levelMax value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5p %5rms [%-17.17t] %-22.22c{1} %-18.18M - %m%n" />
    </layout>
  </appender>

  <appender name="SmtpAppender" type="MySmtpClientSmtpAppender">
    <to value="a@a.com" />
    <from value="admin@x.com" />
    <subject value="Game Server Monitoring Failed!" />
    <smtpHost value="smtp.x.com" />
    <username value="admin" />
    <password value="x" />
    <bufferSize value="256" />
    <lossy value="true" />
    <evaluator type="log4net.spi.LevelEvaluator">
      <threshold value="ERROR" />
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5p %d [ThreadId: %t] Class:%c{1} Method:%M %nMESSAGE:%n%m%n%n" />
    </layout>
  </appender>

  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs\\wwwlog" />
    <appendToFile value="true" />
    <datePattern value="yyyyMMdd" />
    <maximumFileSize value="10MB" />
    <!--<rollingStyle value="Date" />-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="INFO" />
      <levelMax value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
  </appender>


  <root>
    <level value="DEBUG" />
    <appender-ref ref="ConsoleAppender" />
    <appender-ref ref="MySmtpAppender" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?任何提示/建议,以减少日志大小,同时保持清晰度,更好的转换模式?任何有趣的黑客?

编辑:XMl文件没有进入代码块.更新.任何建议?

nak*_*hli 29

没人提到编码.如果您使用中文,日语,阿拉伯语或任何双字节语言记录消息,这一点非常重要.这是一个例子:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
  <encoding value="utf-8" />
  <!-- etc. -->
</appender>
Run Code Online (Sandbox Code Playgroud)

  • 非常有用的评论.我希望这是默认的.但是,当使用value ="utf-8"时,即使文件为空,所有文件也将包含BOM.对于典型的日志记录,通常总是有内容,因此这不是问题.但是,这对于错误和警告日志来说是不合需要的 - 理想情况下应该是空的 - 但由于BOM的原因,它仍然会显示为1 KB的大小,因此您总是需要检查它以防出现真正的错误.解决方法是使用<encoding type ="System.Text.UTF8Encoding"/>代替.这将省略不需要的BOM,因此空日志将显示为0 KB. (17认同)

Dsc*_*duc 11

RollingLogFileAppender的一个建议是使用最小的lockingModel.使用此设置,日志文件不会被锁定,而是打开然后为每次写入关闭.

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
Run Code Online (Sandbox Code Playgroud)

  • 只有在尝试使用多个进程(注意 - 进程,而不是线程; log4net已经是线程安全的)写入同一个日志文件时,才需要`FileAppender.MinimalLock`.否则它只会减慢速度:"这种锁定方法比FileAppender.ExclusiveLock慢得多",来自http://logging.apache.org/log4net/release/sdk/log4net.Appender.FileAppender.MinimalLock.html (3认同)
  • 我还要提一下,写入同一个日志文件的多个进程通常不是一个好主意.从[FAQ](http://logging.apache.org/log4net/release/faq.html#single-file):"问问自己是否真的需要将多个进程登录到同一个文件,然后不要做到这一点;-)".为每个进程提供自己的日志文件来写入通常是个更好的主意. (2认同)

Dav*_*art 7

根据消息级别(调试,信息,错误或致命)在控制台上显示时使用不同颜色进行日志记录.第二个appender是将它保存在文件中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <configSections>
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
   </configSections>

<log4net debug="false">
  <appender name="trace" type="log4net.Appender.TraceAppender, log4net">
    <layout type="log4net.Layout.PatternLayout,log4net">
      <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
    </layout>
  </appender>

 <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender,log4net">
   <mapping>
    <level value="ERROR" />
    <foreColor value="White" />
    <backColor value="Red" />
  </mapping>
  <mapping>
    <level value="DEBUG" />
    <foreColor value="White" />
  </mapping>
  <mapping>
    <level value="INFO" />
    <foreColor value="Green" />
  </mapping>

  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
  </layout>
</appender>

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
  <param name="File" value="Logs/NSCurrent.log" />
  <param name="AppendToFile" value="true" />
  <param name="RollingStyle" value="Date" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <datePattern value="yyyy-MM-dd" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
  </layout>
</appender>

  <root>
    <priority value="DEBUG" />
    <appender-ref ref="RollingFile" />
    <appender-ref ref="ColoredConsoleAppender" />
  </root>
 </log4net>
 </configuration>
Run Code Online (Sandbox Code Playgroud)


Sea*_*ean 5

要减少日志文件大小,您可以尝试调整ConversionPattern:

这是我使用的格式:

  <layout type="log4net.Layout.PatternLayout,log4net">
    <!-- a reduced format, saves bit of log space: -->
    <param name="ConversionPattern" value="%date{MM/dd HH:mm:ss,fff}-{%level}-%message%newline"/>
  </layout>
Run Code Online (Sandbox Code Playgroud)

之前:

2012-06-05 10:58:40,819 [1] INFO我的应用[(null)] - 我的应用程序 - ===星婷....

后:

06/05 11:17:29,151- {INFO} - 我的应用 - ===开始......

注意:Apache的文档似乎对log4net不正确 - 因为它说使用SSS几毫秒,而log4net使用fff

每行少量节省可能会产生很大的差异:)