我可以挂钩log4net日志,调试,信息和错误?

时间:2011-12-15 17:05:14

标签: c# console log4net

我想根据记录消息的严重程度设置不同的控制台颜色。

我想要像

这样的东西
_log.Error("Expected exception",e);

以某种方式做

Console.PushColor(ConsoleColor.DarkRed);
_log.Error("Expected exception",e);
Console.PopColor();

有没有一种简单的方法来挂钩控制台记录器来做这样的事情?

1 个答案:

答案 0 :(得分:3)

首先,是的,log4Net提供了自己的颜色日志适配器:

我们使用两个appender配置来启用std:out和std:err

的输出
<log4net  xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <root>
    <level value="ALL" />
    <appender-ref ref="console.out" />
    <appender-ref ref="console.error" />
  </root>

  <appender name="console.out" type="log4net.Appender.ColoredConsoleAppender">
    <target value="Console.Out" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="DEBUG"/><!-- "DEBUG" OR "INFO" if you want to display these -->
      <levelMax value="INFO"/>
    </filter>
    <mapping>
      <level value="INFO"/>
      <foreColor value="White, HighIntensity"/>
    </mapping>
    <mapping>
      <level value="DEBUG"/>
      <foreColor value="White"/>
    </mapping>
  </appender>

  <appender name="console.error" type="log4net.Appender.ColoredConsoleAppender">
    <target value="Console.Error" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="WARN"/>
      <levelMax value="FATAL"/>
    </filter>
    <mapping>
      <level value="FATAL"/>
      <foreColor value="Yellow, HighIntensity"/>
      <backColor value="Red"/>
    </mapping>
    <mapping>
      <level value="ERROR"/>
      <foreColor value="Red, HighIntensity"/>
    </mapping>
    <mapping>
      <level value="WARN"/>
      <foreColor value="Yellow, HighIntensity"/>
    </mapping>
  </appender>

</log4net>

如果您仍想手动编写输出代码,请使用ILog实现。它基本上为您提供了每种输出类型的方法。要绑定自定义适配器,请创建像这样的配置部分......

<appender name="name" type="NameSpace.ClassOfTypeILog, AssemblyName">
    ...
</appender>