开发过程中经常需要调试和线上环境查看异常日志的需求,但普通消息与异常消息混在一起实在是非常难得找,上则NM的文档够你头痛,所以就将Error级别的日志抽离出来。
本示例采用log4net来配置:
1、先配置web.config,添加:
<configSections>
<!-- 添加log4net配置节 -->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"></section>
</configSections>
2、在<configuration>直接下级添加:
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd'.txt'" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:fff} [%thread] %-5level %logger %ndc - %message%newline" />
</layout>
</appender>
<appender name="ErrorLogAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="Log/" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd'-error.txt'" />
<param name="RollingStyle" value="Date" />
<layout type="log4net.Layout.PatternLayout">
<!--输出格式-->
<param name="ConversionPattern" value="%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
</layout>
</appender>
<root>
<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
<level value="INFO" />
<appender-ref ref="RollingLogFileAppender" />
<level value="ERROR" />
<appender-ref ref="ErrorLogAppender" />
</root>
注意高亮处
InfoLog中配置 INFO ,只记录INFO
ErrorLog中 <level value="ERROR" /> 从ERROR级别开始。
这样就可以将ERROR抽离出来。
3、定义日志类LogHelper
public static class LogHelper
{
static ILog _logdebug = LogManager.GetLogger("Debug");
static ILog _loginfo = LogManager.GetLogger("InfoLog");
static ILog _logwarn = LogManager.GetLogger("Warn");
static ILog _logerror = LogManager.GetLogger("ErrorLog");
static ILog _logfatal = LogManager.GetLogger("Fatal");
static LogHelper()
{
log4net.Config.XmlConfigurator.Configure();
}
public static void Info(string msg)
{
_loginfo.Info(msg);
}
public static void Warn(string msg)
{
_logwarn.Warn(msg);
}
public static void Error(string msg)
{
_logerror.Error(msg);
}
public static void Error(string errtitle, Exception ex)
{
_logerror.Error(errtitle, ex);
}
public static void Fatal(string msg)
{
_logfatal.Fatal(msg);
}
}
4、使用
LogHelper.Info("内容不正确");
LogHelper.Error("Post方法运行错误", ex);
最终会出现两个文件且error记录都在error中info中无error记录:
========================这是个害羞的分割线============================
后面经过测试发现按照之前的配置Info信息被过滤掉了,只生成了普通日志文件,但内容为空,因此配置有问题,改配置。
去掉两个append中的 filter。
去掉root中的内容。
添加两个logger。