已经存在将 log4net 与 Common.Logging 一起使用的解决方案,我们决定要换出 log4net 并换入 Serilog。
在App.config
--<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1215">
++<factoryAdapter type="Common.Logging.Serilog.SerilogFactoryAdapter, Common.Logging.Serilog">
看起来很容易,但是当我继续查看我们现有的App.config
文件时,我发现了不太明显的过渡区域。
--<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
++<section name="serilog" type="Serilog.Configuration.LoggerSettingsConfiguration, serilog"/><!--Not sure if equivalent-->
这种变化似乎并不明显正确,实际上只是在黑暗中拍摄。事实上,我很确定这是错误的。
然后是滚动文件附加程序的实际配置:
<log4net>
<appender name="LM" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%property{LogFileName}\\Program\Logs\\specificProgram.log" />
<param name="RollingStyle" value="Size" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="5" />
<param name="MaximumFileSize" value="10MB" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{MM-dd-yy HH:mm:ss.fff} [%thread] %-5p - %c{1} - %m%n" />
</layout>
</appender>
<appender name="QuickLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%property{LogFileName}\\Program\Logs\\QuickLog.log" />
<param name="RollingStyle" value="Size" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="5" />
<param name="MaximumFileSize" value="10MB" />
<param name="StaticLogFileName" value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{MM-dd-yy HH:mm:ss.fff} [%thread] %-5p - %c{1} - %m%n" />
</layout>
</appender>
<logger name="LM">
<level value="TRACE"/>
<appender-ref ref="LM"/>
</logger>
<logger name="QuickLog">
<level value="TRACE"/>
<appender-ref ref="QuickLog"/>
</logger>
</log4net>
我找不到任何关于从 log4net 交换到 Serilog 主要App.config
用于设置的博客或文档......
在后面的代码中,我们有一个非常简单的初始化
if (null == s_logger || null == quick_logger)
{
log4net.GlobalContext.Properties["LogFileName"] = MachineConfiguration.DataPath;
s_logger = CommonLogging.LogManager.GetLogger("LM");
quick_logger = CommonLogging.LogManager.GetLogger("QuickLog");
}
Serilog 似乎也缺少一个GlobalContext
,或者至少我还没有通过图书馆找到同等的东西。
App.config
从 log4net 到 Serilog的更改是否有任何映射?或在某个地方查找两个库之间的等效类型或参数是什么?
我知道我不能成为第一个进行此交换的人,但我很难找到与我们目前拥有的文件相匹配的文件。