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

本文关键字:调试 信息 错误 日志 log4net 我可以 | 更新日期: 2023-09-27 18:17:54

我想根据日志信息的严重程度设置不同的控制台颜色。

我想要像

_log.Error("Expected exception",e);

to do

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

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

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

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

我们使用两个追加器配置来同时输出到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>