首页 > 解决方案 > 使用 Common.Logging 从 log4net 切换到 Serilog

问题描述

已经存在将 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的更改是否有任何映射?或在某个地方查找两个库之间的等效类型或参数是什么?

我知道我不能成为第一个进行此交换的人,但我很难找到与我们目前拥有的文件相匹配的文件。

标签: log4netserilogcommon.logging

解决方案


推荐阅读