将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。

 

时间: 2024-10-01 21:57:02

将Error异常日志从普通日志中剥离的相关文章

Perl中捕获警告信息、异常信息并写入日志详解

  这篇文章主要介绍了Perl中捕获警告信息.异常信息并写入日志详解,本文分别给出了捕获警告--不处理.捕获警告--并转换成异常.捕获警告--并写入日志.捕获并写日志的完整例子等实用实例,需要的朋友可以参考下 虽然建议在每个Perl脚本和模块中开启警告,可是你又不想用户看到Perl发出的警告. 一方面你想在代码前面使用use warnings作为你的安全网,另一方面,通常警告会出现在屏幕上.多数情况下,客户不知道如何处理这些警告.如果幸运的话这些警告仅仅让客户惊讶一下,当然,不幸的是他们尝试着去

spring mvc-Spring MVC 简单异常处理器如何定义日志文件路径

问题描述 Spring MVC 简单异常处理器如何定义日志文件路径 如题.项目中有log4j的异常处理机制,但现在需要使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver,来进行异常的捕捉,将异常全部放在spring mvc定义的日志文件中.那么在xml文件中配置单独的spring mvc的异常处理文件路径,不知该如何配置?谢谢. spring mvc中配置简单异常处理器SimpleMappingExceptionResolver如下: <be

高可用日志探险——基于 Kubernetes 中的 ELK

本文讲的是高可用日志探险--基于 Kubernetes 中的 ELK[编者的话]本文主要讲述了作者的团队基于 Kubernetes 中的 ELK,构建高可用日志系统的实践,并总结一些过程中踩到的坑和一些对于从头开始搭建的建议,本文也是此系列文章的第一篇,后续文章可持续关注. [3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站]本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览:持续集成系统介绍:客户端与服务端的 CI/CD 实践:开

解析Nginx中的日志模块及日志基本的初始化和过滤配置_nginx

无论在任何项目中,日志都是一个非常重要的模块,无论是问题定位还是日常信息的管理,都离不开他 在nginx中,ngx_errlog_module模块专门用于处理nginx日志信息,是nginx的core模块之一 在 main 函数中,时间初始化结束后马上进行的就是日志模块的初始化 日志结构: 日志模块的初始化主要做的事情就是初始化全局变量 ngx_log,并创建 errlog 文件 ngx_log_s 结构ngx_log 变量是一个 ngx_log_s 结构体,定义在 core/ngx_log.h

PHP中把错误日志保存在系统日志中

  这篇文章主要介绍了PHP中把错误日志保存在系统日志中(Windows系统),本文讲解了设置方法和查看方法,需要的朋友可以参考下 [将错误记录到系统日志中] 在 php.ini 中将 error_log 设置为: 复制代码 代码如下: error_log = syslog 或者在运行时使用 ini_set() 函数设置. [例1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?php //关闭错误显示 ini_set('display_errors

如何把日志写入数据库-如何把日志写入mysql数据库(日志就是记录项目中的所有操作)

问题描述 如何把日志写入mysql数据库(日志就是记录项目中的所有操作) 我在mysql中建了表,字段有:操作者ID.操作者姓名.模块名称.操作类型.IP地址.MAC地址.操作时间.查询条件.日志详细内容其中 "查询条件" 指用户在系统中,如果用 "查询" 操作时输入的查询条件:IP地址.MAC地址 是用户机器使用的ip 和 mac 地址:操作类型 暂时有这么几项:使用业务功能.浏览.查询.登入.登出....搞不清的都归为 使用业务功能 ,然后在 日志详细内容 中说

.NET Core的日志[3]:将日志写入Debug窗口

定义在NuGet包"Microsoft.Extensions.Logging.Debug"中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志消息.如果需要使用DebugLogger来写日志,我们需要将它的提供者DebugLoggerProvider注册到LoggerFactory上.由于定义在Debug类型中的所有方法都是针对Debug编译模式的,所以在只有针对Debug模式编译的应用中使用DebugLogger才有意义.这里将的"De

日志系列--程序日志处理挑战与方案

程序日志(AppLog)有什么特点? 内容最全:程序日志是由程序员给出,在重要的地点.变量数值以及异常都会有记录,可以说线上90%以上Bug都是依靠程序日志输出定位到 格式比较随意:代码往往经过不同人开发,每个程序员都有自己爱好的格式,一般非常难进行统一,并且引入的一些第三方库的日志风格也不太一样 有一定共性:虽然格式随意,但一般都会有一些共性的地方,例如对Log4J日志而言,会有如下几个字段是必须的: 时间 级别(Level) 所在文件或类(file or class) 行数(Line Num

.NET Core的日志[4]:将日志写入EventLog

面向Windows的编程人员应该不会对Event Log感到陌生,以至于很多人提到日志,首先想到的就是EventLog.EventLog不仅仅记录了Windows系统自身针对各种事件的日志,我们的应用也可以利用提供的API将日志消息写到EventLog中.与EventLog相关的API都定义在System.Diagnostics.EventLog这个类型中,我们不仅仅可以利用它读取.写入和删除日志,还可以使用它来创建和删除Event Source..NET Core的日志模型利用EventLog

.NET Core的日志[2]:将日志输出到控制台

对于一个控制台应用,比如采用控制台应用作为宿主的ASP.NET Core应用,我们可以将记录的日志直接输出到控制台上.针对控制台的Logger是一个类型为ConsoleLogger的对象,ConsoleLogger对应的LoggerProvider类型为ConsoleLoggerProvider,这两个类型都定义在 NuGet包"Microsoft.Extensions.Logging.Console"之中. 本文已经同步到<ASP.NET Core框架揭秘>之中] 目录