我想根据记录消息的严重程度设置不同的控制台颜色。
我想要像
这样的东西_log.Error("Expected exception",e);
以某种方式做
Console.PushColor(ConsoleColor.DarkRed);
_log.Error("Expected exception",e);
Console.PopColor();
有没有一种简单的方法来挂钩控制台记录器来做这样的事情?
答案 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>