.net Log4Net日志的配置及使用 全局异常过滤器

.net添加Log4Net日志的配置及使用,以及将其设置为全局异常过滤器,主要有以下步骤:

1. 新建一个Web应用程序
2. 引用log4net.dll
3. 添加config文件
4. 在AssemblyInfo.cs进行注册
5. 在Global.asax中进行初始化设置
6. 添加Log4Helper.cs帮助类
7. 新增过滤器LogExceptionFilter.cs文件
8. 在FilterConfig.cs中添加过滤器
9. 在Global.asax中注册过滤器

详细步骤如下:

1.新建一个web应用程序,如下图所示

??

2.利用Nuget引用log4net.dll

?

3.为了便于管理,添加log4net.config文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
  </system.web>

  <log4net>

    <appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\\Warn"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date"/>
      <datePattern value="yyyy\\yyyyMM\\yyyyMMdd‘.txt‘"/>
      <staticLogFileName value="false"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <maximumFileSize value="1GB" />
      <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%n==========
                                  %n【日志级别】%-5level
                                  %n【记录时间】%date
                                  %n【线程编号】[%thread]
                                  %n【执行时间】[%r]毫秒
                                  %n【出错文件】%F
                                  %n【出错行号】%L
                                  %n【出错的类】%logger 属性[%property{NDC}]
                                  %n【错误描述】%message
                                  %n【错误详情】%newline"/>
      </layout>
    </appender>

    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\\LogInfo"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date"/>
      <datePattern value="yyyy\\yyyyMM\\yyyyMMdd‘.txt‘"/>
      <staticLogFileName value="false"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <maximumFileSize value="1GB" />
      <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%n==========
                                  %n【日志级别】%-5level
                                  %n【记录时间】%date
                                  %n【线程编号】[%thread]
                                  %n【执行时间】[%r]毫秒
                                  %n【出错文件】%F
                                  %n【出错行号】%L
                                  %n【出错的类】%logger 属性[%property{NDC}]
                                  %n【错误描述】%message
                                  %n【错误详情】%newline"/>
      </layout>
    </appender>

    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\\LogError"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date"/>
      <datePattern value="yyyy\\yyyyMM\\yyyyMMdd‘.txt‘"/>
      <staticLogFileName value="false"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <maximumFileSize value="1GB" />
      <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%n==========
                                  %n【日志级别】%-5level
                                  %n【记录时间】%date
                                  %n【线程编号】[%thread]
                                  %n【执行时间】[%r]毫秒
                                  %n【出错文件】%F
                                  %n【出错行号】%L
                                  %n【出错的类】%logger 属性[%property{NDC}]
                                  %n【错误描述】%message
                                  %n【错误详情】%newline"/>
      </layout>
    </appender>
    <logger name="logerror">
      <level value="ERROR" />
      <appender-ref ref="ErrorAppender" />
    </logger>

    <logger name="warning">
      <level value="WARN" />
      <appender-ref ref="WarnAppender" />
      <!--<appender-ref ref="ConsoleAppender" />-->
    </logger>

    <logger name="info">
      <level value="ALL"/>
      <appender-ref ref="InfoAppender" />
    </logger>
  </log4net>
</configuration>

config文件中节点说明如下:

<!--错误日志:记录错误日志-->
    <!--按日期分割日志文件 一天一个-->
    <!-- appender 定义日志输出方式   将日志以回滚文件的形式写到文件中。-->
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <!--保存路径:下面路径项目启动的时候会在相应目录创建logs、logError文件夹-->
      <file value="Logs\\LogError"/>

      <!-- 如果想在本项目中添加路径,那就直接去掉C:\\  只设置log\\LogError  项目启动中默认创建文件夹 -->
      <appendToFile value="true"/>

      <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
      <rollingStyle value="Date"/>

      <!--这是按日期产生文件夹-->
      <datePattern value="yyyy\\yyyyMM\\yyyyMMdd‘.txt‘"/>

      <!--是否只写到一个文件中-->
      <staticLogFileName value="false"/>

      <!--保留的log文件数量 超过此数量后 自动删除之前的   好像只有在 按Size分割时有效 设定值value="-1"为不限文件数-->
      <param name="MaxSizeRollBackups" value="100"/>

      <!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志-->
      <maximumFileSize value="1GB" />

      <!-- layout 控制Appender的输出格式,也可以是xml  一个Appender只能是一个layout-->
      <layout type="log4net.Layout.PatternLayout">

        <!--每条日志末尾的文字说明-->
        <!--输出格式 模板-->
        <!--<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n错误描述:%message%newline %n"/>-->
        <conversionPattern value="%n==========
                                  %n【日志级别】%-5level
                                  %n【记录时间】%date
                                  %n【线程编号】[%thread]
                                  %n【执行时间】[%r]毫秒
                                  %n【出错文件】%F
                                  %n【出错行号】%L
                                  %n【出错的类】%logger 属性[%property{NDC}]
                                  %n【错误描述】%message
                                  %n【错误详情】%newline"/>
      </layout>
    </appender>

<appender/>节点的name属性的值对应<logger/>节点中的name属性的值

4.在AssemblyInfo.cs文件中对log4net.config文件进行注册,添加代码如下

// 为项目注册Log4Net.config配置文件
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

5.在Global.asax中对其进行初始化设置

//读取日志 如果使用log4net,应用一开始的时候,都要进行初始化设置
log4net.Config.XmlConfigurator.Configure();

6.如果不需要添加全局异常过滤器的话,则执行到这一步即可,添加Log4Helper.cs文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using log4net;

namespace LogDemo
{
    public class Log4netHelper
    {
        public static readonly ILog logInfo = log4net.LogManager.GetLogger("info");
        public static readonly ILog logWarn = log4net.LogManager.GetLogger("warning");
        public static readonly ILog logError = log4net.LogManager.GetLogger("logerror");

        public static void Info(string info)
        {
            if (logInfo.IsInfoEnabled)
            {
                logInfo.Info(info);
            }
        }

        public static void Warn(string info, Exception ex)
        {
            if (logWarn.IsWarnEnabled)
            {
                logWarn.Warn(info, ex);
            }
        }

        public static void Debug(string info, Exception ex)
        {
            if (logError.IsDebugEnabled)
            {
                logError.Debug(info, ex);
            }
        }

        public static void ErrorLog(object msg)
        {
            //Task.Run(() => logError.Error(msg)); // 异步
            logError.Error(msg);
        }

        public static void ErrorLog(Exception ex)
        {
            //Task.Run(() => logError.Error(Newtonsoft.Json.JsonConvert.SerializeObject(ex)));
            logError.Error(Newtonsoft.Json.JsonConvert.SerializeObject(ex));
        }

        public static void ErrorLog(object msg, Exception ex)
        {
            if (ex != null)
            {
                //Task.Run(() => logError.Error(msg, ex)); // 异步
                logError.Error(msg, ex);
            }
            else
            {
                //Task.Run(() => logError.Error(msg)); // 异步
                logError.Error(msg);
            }
        }
    }
}

7.新增Filters文件夹,添加LogExceptionFilter.cs文件,如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace LogDemo.Filters
{
    /// <summary>
    /// 异常过滤器
    /// </summary>
    public class LogExceptionFilter : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            if (!filterContext.ExceptionHandled)
            {
                string controllerName = (string)filterContext.RouteData.Values["controller"];
                string actionName = (string)filterContext.RouteData.Values["action"];
                string msgTemplate = "在执行 controller[{0}] 的 action[{1}] 时产生异常:[{2}]";

                log4net.ILog log = log4net.LogManager.GetLogger("LogError");//获取一个日志记录器
                log.Error(DateTime.Now.ToString() + ": login success");//写入一条新log

                Log4netHelper.ErrorLog(string.Format(msgTemplate, controllerName, actionName, filterContext.Exception.Message), filterContext.Exception);

                filterContext.HttpContext.Response.Redirect("/Error/Index");
                return;
            }
            else
            {
                base.OnException(filterContext);
            }
        }
    }
}

LogExceptionFilter

8.在App_Start文件中添加FilterConfig.cs文件

using LogDemo.Filters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace LogDemo.App_Start
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            // 注册异常处理过滤器
            filters.Add(new LogExceptionFilter());

            filters.Add(new CustomerFilterAttribute());
        }
    }
}

9.在Global.asax文件中进行注册

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

如果本文对你有所帮助,请留下痕迹。

本文参考地址:

https://www.cnblogs.com/shiruina/p/9284446.html

https://www.cnblogs.com/Hmd528/p/11082814.html

原文地址:https://www.cnblogs.com/JoanLin-workNotes/p/12529211.html

时间: 2024-10-13 00:10:37

.net Log4Net日志的配置及使用 全局异常过滤器的相关文章

关于log4net日志的配置流程

最近又重新整理一下log4net日志的配置,现在记录一下流程和一些遇到的问题,以备后续使用,具体的配置参数等信息.此文无,见谅! 1. 下载log4net.dll文件(网上很多,随便找一个!) 2. 项目中引用此dll 3. appconfig中配置log4net(具体配置方案有很多例子.) 4. AssemblyInfo.cs 中添加"[assembly: log4net.Config.XmlConfigurator(Watch = true)]" 5. winform中调用&quo

log4net日志的配置及简单应用

在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率.而本菜鸟在大神推荐和指导下使用log4net这一插件工具,其中也学到了一些皮毛,所谓好记性不如烂笔头嘛.为此,将把这些心得体会记录下来,以免遗忘.同时,也为各位童鞋提供一些参考.在此声明,本文粗浅之极,大神莫入. 对于log4net有什么功能,这里就不赘述了.直接进入本文重点,也就是log4net的配置和简单使用. 首先,项目要引入log4net.dl

MVC 全局异常过滤器HandleErrorAttribute

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc; namespace 过滤器.Filtes{ /// <summary> /// 全局异常过滤器/// </summary> public class MyHandleErrorAttribute:HandleErrorAttribute { public override voi

Log4net日志GUI配置工具

关于log4net的配置文章在园子里真的很多,但是有关GUI界面配置的文章确定太少,改写了一个以前很早的工具 以前的那个有很多的问题,这个基本的大的问题没有,可能一个小问题还是需要修改下,基本功能肯定是能满足的,先上图再说: 首先选择一个要配置的文件,然后加载配置文件里面相关配置显示到界面上,然后再分别配置Appender与logger,关于它们, appender其实就是输出到哪种介质上,也就是输出源,logger就是记录器. 点击Appenders中的新增,可以添加一个新的附加器,如下图所示

Log4net 日志记录配置信息

<log4net> 8 <!--配置日志的级别,低于此级别的就不写到日志里面去 9 OFF.FATAL.ERROR, WARN, INFO, DEBUG, ALL 10 --> 11 <root> 12 <level value="DEBUG" /> 13 <appender-ref ref="LogFileAppender" /> 14 <appender-ref ref="Console

[转]Log4Net日志插件配置详解

log4net是一款优秀的第三方日志框架,可以很容易的加载到开发项目中(引用log4net的dll,再配置些基本参数即可),帮助程序员把日志信息输出到各种不同的目标,常见的有文本.数据库.windows日志.邮件.内存缓冲区等目标. 首先需要log4net的dll(源码中dll版本是1.2.10.0),引用到程序中,然后再配置下配置文件,配置文件如下: [html] view plain copy <?xml version="1.0"?> <configuratio

从壹开始前后端分离 [.netCore 不定期更新 ] 三十五║ 完美实现全局异常日志记录

缘起 哈喽我是不定期更新的日常,昨天群里小伙伴问到了记录日志,当然,以前我也挖过这个坑,后来一直没有来得及填上,也想着 swagger 一直又有错误信息展示的功能,就迟迟没有添加这个功能,不过昨天夜里想了想,还是需要增加上,旨在提高框架的高效性.不定期日常就直接上代码了,我有一个小想法,就是希望大家有好的想法,可以给我说,我会整理下,添加到框架里,并在文章头里写上 投稿作者:这里重点说明下,是参考群里小伙伴 Hello World! 的相关内容,并在他的基础上更新,添加了注入和全局,大家可以看看

C# 日志的配置流程

转载自https://www.cnblogs.com/SuperMetalMax/p/6203188.html 1. 下载log4net.dll文件 http://download.csdn.net/detail/abc456456456456/7653857 2. 项目中引用此dll 3. appconfig中配置log4net <?xml version="1.0" encoding="utf-8"?> <configuration> &

Log4Net 日志配置

前述 园子里有许多人对log4net这款开源的日志记录控件有很多介绍.在这里个人再做一次总结,希望对以后有所帮助,需要的时候可以直接使用,减 少查阅资料的时间.利用log4net可以方便地将日志信息记录到文件.控制台.Windows事件日志和数据库,并且我们还可以记载控制要记载的日志级 别,可以记载的日志类别包括:FATAL(致命错误).ERROR(一般错误).WARN(警告).INFO(一般信息).DEBUG(调试信息). log4net 有四种主要的组件,分别是Logger(记录器), Re