登录API

Mat*_*lls 8 .net logging

当我为其他人编写API程序集时,有一些日志记录功能可以帮助诊断客户端使用它的问题.

但是,如果我在程序集中引用log4net,这可能会与客户端应用程序使用的log4net版本冲突.

我不想通过编写自己的日志框架来重新发明轮子.

什么是解决我的困境的最佳方法?

编辑:我想我可以要求将我正在使用的特定版本的log4net安装到GAC中以避免与客户端的版本冲突,但这会使API变得很胖,需要安装而不是插件.

zvo*_*kov 4

看看SpringFramework是如何解决这个问题的。它使用 Common.Logging,然后可以通过配置文件映射到 log4net 或任何其他自定义日志记录框架。您可以在Common.Logging 网站上找到更多详细信息,但基本上您需要执行以下操作:

  • 参考 Common.Logging 在你的类中使用它就像 log4net 一样
  • 框架的使用者将配置 Common.Logging 以使用 log4net,如下所示:

  <configSections>
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
        <arg key="configType" value="INLINE" />
      </factoryAdapter>
    </logging>
  </common>

  <log4net>
.... normal log4net configuration goes here...
  </log4net>
Run Code Online (Sandbox Code Playgroud)

如果客户端也直接使用SpringFramework或Common.Logging,冲突仍然有可能,但发生的几率大大降低,原因如下:

  • Common.Logging 团队正在努力确保未来版本与过去版本的向后兼容性。例如,2.0 与 1.2 完全二进制兼容。
  • Common.Logging 的更改频率低于 log4net,至少在理论上是这样