【问题标题】:Direct logging to different outputfiles with log4net使用 log4net 直接记录到不同的输出文件
【发布时间】:2013-03-10 14:10:42
【问题描述】:

我需要将我的应用程序中的某些事件记录到某个文件中。我有一个正在工作的主日志文件,但是如何将特定事件定向到某个文件。

在下面的示例中,我如何将 count 属性记录到某个文件?

ILogger mainApplog = container.Resolve<ILogger>(); // this is working just fine to c:\log.txt
ILogger valuesLog = container.Resolve<ILogger>(); // what should I resolve to log to c:\values.txt?

mainApplog.DebugFormat("Calculating values");

var count = 0;
while (true)
{

    count++;
    valuesLog.InfoFormat(count.ToString());


    if (count > 100)
        break;
}
mainApplog.DebugFormat("Calculations completed");

【问题讨论】:

  • 一般来说你不应该直接解析组件,除了你的顶级组件。对于日志记录组件,通常使用日志记录工具 (docs.castleproject.org/Windsor.Logging-Facility.ashx)。如果你选择使用这个,每个组件都会得到它自己的记录器,你可以配置 log4net 将不同组件的输出发送到不同的文件。
  • 我同意,但是当我已经使用 log4net 来完成几乎相同的事情时,我“觉得”构建自己的日志框架是不必要的。但是你知道我如何根据目的(与组件相反)指导某些输出吗?
  • 你所指的 ILogger,是windosr的ILogger还是Log4Net的ILogger?
  • Log4Net(实际上是通过温莎城堡)但是温莎并不重要,我想知道如何使用 Log4net。

标签: logging castle-windsor log4net


【解决方案1】:

如果只是关于 Log4Net,请尝试以下操作:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>

  <log4net>
    <appender name="MainAppender" type="log4net.Appender.ColoredConsoleAppender" >
      <mapping>
        <level value="ALL" />
        <foreColor value="White" />
        <backColor value="Red, HighIntensity" />
      </mapping>
      <filter type="log4net.Filter.LoggerMatchFilter">
        <LoggerToMatch value="MainApplicationLog" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter">
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
      </layout>
    </appender>

    <appender name="ValueAppender" type="log4net.Appender.ColoredConsoleAppender" >
      <mapping>
        <level value="ALL" />
        <foreColor value="White" />
        <backColor value="Green, HighIntensity" />
      </mapping>
      <filter type="log4net.Filter.LoggerMatchFilter">
        <LoggerToMatch value="ValuesLog" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter">
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="ALL" />
      <appender-ref ref="MainAppender" />
      <appender-ref ref="ValueAppender" />
    </root>
  </log4net>
</configuration>

您可以用自己的选择替换附加程序。为了完整起见,这是执行日志记录的代码。

log4net.Config.XmlConfigurator.Configure();

ILog mainAppLog = LogManager.GetLogger("MainApplicationLog");
ILog valuesLog = LogManager.GetLogger("ValuesLog");

mainAppLog.Debug("Calculating values");
valuesLog.InfoFormat("{0}", 0); // do not use ToString, you will use processor time even when not logging

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多