我如何了解普通日志记录中是否存在记录器?

How can I understand if a logger exists in common logging?

我在我的应用程序中使用 Common.Logging 并且我创建了一个单独的记录器来写入一些调试信息。

我可以使用

检索我的记录器
LogManager.GetLogger("MyCustomLogger");

但是,如果找不到此记录器,我会获取根记录器。我希望如果找不到记录器,则不会记录任何内容。由于我的应用程序的结构,我无法删除根记录器。

如何使用 Common.Logging 实现此行为?

配置是

<common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net1213">
        <!-- Common Logging assumes that log4net is initialized -->
        <arg key="configType" value="EXTERNAL"/>
      </factoryAdapter>
    </logging>
  </common>

  <log4net>
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log/debug.txt"/>
      <appendToFile value="true"/>
      <maximumFileSize value="10000KB"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="5"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff} [%t] %-5p %c - %m%n"/>
      </layout>
    </appender>

    <appender name="MyCustomLogAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log/queries.txt" />
      <appendToFile value="true" />
      <maximumFileSize value="50000KB" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff} [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <!-- levels: DEBUG, INFO, WARN, ERROR, FATAL -->
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="FileAppender"/>
    </root>

    <logger name="MyCustomLog" additivity="false">
      <level value="DEBUG" />
      <appender-ref ref="MyCustomLogAppender" />
    </logger>
  </log4net>

我遇到了同样的问题。如果未配置指定的记录器,我想 return。

我找到的解决方案:

private static ILog _log;

protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{

    if (LogManager.Exists("MyCustomLoggerName") == null)
        return;

    if (_log == null)
        _log = LogManager.GetLogger("MyCustomLoggerName");

    ... 
}

我无法声明 private static readonly ILog _log = LogManager.GetLogger("MyCustomLoggerName"); 因为那时 LogManager.Exists("MyCustomLoggerName") return 编辑了一些东西...

log4net.config 文件中,我为此记录器设置了 additivity="false"