代码之家  ›  专栏  ›  技术社区  ›  mtech

以编程方式配置Log4NetLoggerFactoryAdapter(重试)

  •  1
  • mtech  · 技术社区  · 9 年前

    有人问了这个问题 here 然而,该解决方案不是编程配置。在本例中,库 Wrapper.dll 正确配置了 Common.Logging .控制台应用程序 ConsoleApplication1.exe 尝试实现 Log4NetLoggerFactoryAdapter .

    工作正常 ,从发送日志条目 包装.dll 到控制台。

    这个 app.config :

    <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.Log4Net1211">
          <arg key="configType" value="INLINE" />
        </factoryAdapter>
      </logging>
    </common>
    <log4net>... a valid ConsoleAppender ..</log4net>
    

    内的代码 ConsoleApplication1 :

    //var properties = new Common.Logging.Configuration.NameValueCollection();
    //properties.Add("configType", "INLINE");
    //var adapter = new Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter(properties);
    var c1 = new Wrapper();
    

    不起作用 。它不会从发送日志条目 包装.dll 到控制台。 这个 应用程序配置文件 :

    <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.Log4Net1211">
          <arg key="configType" value="INLINE" />
        </factoryAdapter>
      </logging> 
    </common> -->
    <log4net>... a valid ConsoleAppender ..</log4net>
    

    内的代码 控制台应用程序1 :

    var properties = new Common.Logging.Configuration.NameValueCollection();
    properties.Add("configType", "INLINE");
    var adapter = new Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter(properties);
    var c1 = new Wrapper();
    

    通过编程解决方案,我可以成功使用 GetLogger 在内部 控制台应用程序1 从适配器或 log4net ,但我无法从“Wrapper”库中使用的记录器获取要传播的日志事件。

    注意,在 工作正常 我已经允许xml并对编程调用进行了注释。在里面 不起作用 我已经对相关的xml进行了注释,并实现了编程代码。还要注意,这是一个微不足道的例子。真正的应用程序正在尝试使用一个.NET库,该库实现 通用.日志记录 来自Matlab。

    1 回复  |  直到 7 年前
        1
  •  0
  •   stuartd saeed    9 年前

    创建适配器后,必须将其设置为 LogManager's Adapter :

    var adapter = new Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter(properties);
    Common.Logging.LogManager.Adapter = adapter;
    var c1 = new Wrapper();