将Error异常日志从普通日志中剥离
开发过程中经常需要调试和线上环境查看异常日志的需求,但普通消息与异常消息混在一起实在是非常难得找,上则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>
<logger additivity="true" name="InfoLog">
<level value="INFO" />
<appender-ref ref="RollingLogFileAppender" />
</logger>
<logger additivity="true" name="ErrorLog">
<level value="ERROR" />
<appender-ref ref="ErrorLogAppender" />
</logger>
</log4net>
注意高亮处
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。
公众号【一个码农的日常】 技术群:319931204 1号群: 437802986 2号群: 340250479
出处:http://zhangs1986.cnblogs.com/
码云:https://gitee.com/huanzui
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2014-02-28 不要为自己找借口,你可以做到的--职场实用做人法则
2013-02-28 选项卡TabHost
2013-02-28 拖动条SeekBar及星级评分条
2013-02-28 进度条ProgressBar
2013-02-28 时钟AnalogClock与DigitalClock