公司用log4net记录日志,文件的形式,后面想记录的东西越来越多。发现会出现文件被占用的情况。就想log4net应该有缓存,当要写入的文件达到一定数量的时候再写入。然后在网上查了很多,发现几乎没有写文件日志用缓存的,都是数据库缓存到一定条数在写入。
经过一天的测试终于成功了。下面是部分代码和配置
<log4net debug="true">
<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
<bufferSize value="10"/><!--次数-->
<appender-ref ref="RollingLogFileAppender" />
</appender>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="applicationLog.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date] %thread -- %-5level -- %logger [%M] -- %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="BufferingForwardingAppender" />
<!--这里不能有此节点<appender-ref ref="RollingLogFileAppender" />-->
</root>
</log4net>
然后代码中这样写
log4net.ILog log = log4net.LogManager.GetLogger("BufferingForwardingAppender");
log.Info(“日志”);
注意配置节点的顺序root→BufferingForwardingAppender→BufferingForwardingAppender→RollingLogFileAppender。root配置中不能出现<appender-ref ref="RollingLogFileAppender" />。再有bufferSize 的值不是大小,而是记录日志的次数,我配置的10,到第十一次的时候就会写入文件。
查网页不管是官网还是博客都说了BufferingForwardingAppender的用法,这里就不多说了。
但是自己测试的时候一开始没有测试出来,可能是我一开始把buffersize的value值当成是大小而不是次数,导致测试的时候还以为是自己配置有问题呢。
因为第一次接触,原理还不是很懂,但是查了很多写文件日志缓存的办法都没找到,所以发到这里希望对大家有用。
最后不要忘了配置log4net.config的路径,系统启动的时候:log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~") + @"\log4net.config")); 或者项目的AssemblyInfo.cs中[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
————————————————
版权声明:本文为CSDN博主「yangguosheng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangguosheng/article/details/107703111