• 一、Log4Net配置


    Core的配置

    一、创建core包含控制和视图的项目以及Log4Net引用

    二、创建Log4Net配置文件

    右击项目->添加文件   Log4Net.config

    2

    复制以下代码 

     以下配置可做参考:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <!--添加自定义节点:log4net type:解析类名,程序集名(log4net.dll)-->
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>
      <log4net>
        <root>
          <!--<level value="DEBUG"/>-->
          <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
          <!--比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录-->
          <level value="ALL"/>
          <!--根据log级别记录到不同的日志文件-->
          <appender-ref ref="DebugLogger" />
          <appender-ref ref="InfoLogger" />
          <appender-ref ref="WarnLogger" />
          <appender-ref ref="ErrorLogger" />
          <appender-ref ref="FatalLogger" />
        </root>
    
        <!--Debug文件日志记录器-->
        <appender name="DebugLogger" type="log4net.Appender.RollingFileAppender">
          <!--日志存放文件夹-->
          <file value="LogDebug"/>
          <!--是否追加到文件-->
          <appendToFile value="true" /> 
          <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <!--使用UTF-8编码-->
          <Encoding value="UTF-8" />
          <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
          <maxSizeRollBackups value="-1"/>
          <!--是否只写到一个文件中-->
          <StaticLogFileName value="false"/>
          <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
          <rollingStyle value="Date" />
          <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
          <param name="datePattern" value="yyyy/yyyy-MM/yyyy-MM-dd.'log'" />
          <!--过滤设置,LevelRangeFilter为使用的过滤器。-->
          <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="DEBUG" />
            <levelMax value="DEBUG" />
          </filter>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
            <!-- 输出格式 日期,日志级别,消息,换行-->
            <param name="ConversionPattern" value="%date [%-5p] %message%n" />
          </layout>
        </appender>
    
        <!--InfoLog文件日志记录器-->
        <appender name="InfoLogger" type="log4net.Appender.RollingFileAppender">
          <!--日志存放文件夹-->
          <file value="LogInfo"/>
          <!--是否追加到文件-->
          <appendToFile value="true" />
          <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <!--使用UTF-8编码-->
          <Encoding value="UTF-8" />
          <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
          <maxSizeRollBackups value="-1"/>
          <!--是否只写到一个文件中-->
          <StaticLogFileName value="false"/>
          <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
          <rollingStyle value="Date" />
          <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
          <param name="datePattern" value="yyyy/yyyy-MM/yyyy-MM-dd.'log'" />
          <!--过滤设置,LevelRangeFilter为使用的过滤器。-->
          <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="INFO" />
            <levelMax value="INFO" />
          </filter>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
            <!-- 输出格式 日期,日志级别,消息,换行-->
            <param name="ConversionPattern" value="%date [%-5p] %message%n" />
          </layout>
        </appender>
    
        <!--WarnLog文件日志记录器-->
        <appender name="WarnLogger" type="log4net.Appender.RollingFileAppender">
          <!--日志存放文件夹-->
          <file value="LogWarn"/>
          <!--是否追加到文件-->
          <appendToFile value="true" />
          <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <!--使用UTF-8编码-->
          <Encoding value="UTF-8" />
          <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
          <maxSizeRollBackups value="-1"/>
          <!--是否只写到一个文件中-->
          <StaticLogFileName value="false"/>
          <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
          <rollingStyle value="Date" />
          <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
          <param name="datePattern" value="yyyy/yyyy-MM/yyyy-MM-dd.'log'" />
          <!--过滤设置,LevelRangeFilter为使用的过滤器。-->
          <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="WARN" />
            <levelMax value="WARN" />
          </filter>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
            <!-- 输出格式 日期,日志级别,消息,换行-->
            <param name="ConversionPattern" value="%date [%-5p] %message%n" />
          </layout>
        </appender>
    
        <!--ErrorLog文件日志记录器-->
        <appender name="ErrorLogger" type="log4net.Appender.RollingFileAppender">
          <!--日志存放文件夹-->
          <file value="LogError"/>
          <!--是否追加到文件-->
          <appendToFile value="true" />
          <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <!--使用UTF-8编码-->
          <Encoding value="UTF-8" />
          <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
          <maxSizeRollBackups value="-1"/>
          <!--是否只写到一个文件中-->
          <StaticLogFileName value="false"/>
          <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
          <rollingStyle value="Date" />
          <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
          <param name="datePattern" value="yyyy/yyyy-MM/yyyy-MM-dd.'log'" />
          <!--过滤设置,LevelRangeFilter为使用的过滤器。-->
          <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="ERROR" />
            <levelMax value="ERROR" />
          </filter>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
            <!-- 输出格式 日期,日志级别,消息,换行-->
            <param name="ConversionPattern" value="%date [%-5p] %message%n" />
          </layout>
        </appender>
    
        <!--FatalLog文件日志记录器-->
        <appender name="FatalLogger" type="log4net.Appender.RollingFileAppender">
          <!--日志存放文件夹-->
          <file value="LogFatal"/>
          <!--是否追加到文件-->
          <appendToFile value="true" />
          <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
          <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
          <!--使用UTF-8编码-->
          <Encoding value="UTF-8" />
          <!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数-->
          <maxSizeRollBackups value="-1"/>
          <!--是否只写到一个文件中-->
          <StaticLogFileName value="false"/>
          <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
          <rollingStyle value="Date" />
          <!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
          <param name="datePattern" value="yyyy/yyyy-MM/yyyy-MM-dd.'log'" />
          <!--过滤设置,LevelRangeFilter为使用的过滤器。-->
          <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="FATAL" />
            <levelMax value="FATAL" />
          </filter>
          <!--日志格式-->
          <layout type="log4net.Layout.PatternLayout">
            <!-- 输出格式 日期,日志级别,消息,换行-->
            <param name="ConversionPattern" value="%date [%-5p] %message%n" />
          </layout>
        </appender>
        
      </log4net>
    </configuration>

    三、添加自定义log4net使用类

    using log4net;
    using log4net.Config;
    using System;
    using System.IO;
    
    namespace mytest
    {
        /// <summary>
        /// Logger是直接和应用程序交互的组件。Logger只是产生日志,然后由它引用的Appender记录到指定的媒介,并由Layout控制输出格式。
        /// </summary>
        public class Logger
        {
            private static ILog logger;
            static Logger()
            {
                if (logger == null)
                {
                    var repository = LogManager.CreateRepository("NETCoreRepository");
                    //log4net从log4net.config文件中读取配置信息
                    XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
                    logger = LogManager.GetLogger(repository.Name, "InfoLogger");
                }
            }
    
            /// <summary>
            /// (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。 下面演示根据每个日志等级生成对应的一个文件。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Debug(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Debug(message);
                else
                    logger.Debug(message, exception);
            }
    
            /// <summary>
            /// INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Info(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Info(message);
                else
                    logger.Info(message, exception);
            }
    
            /// <summary>
            /// WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Warn(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Warn(message);
                else
                    logger.Warn(message, exception);
            }
    
            /// <summary>
            /// (一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Error(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Error(message);
                else
                    logger.Error(message, exception);
            }
    
            /// <summary>
            /// FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Fatal(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Fatal(message);
                else
                    logger.Fatal(message, exception);
            }
    
        }
    } 

      

    四、使用

            public IActionResult Index()
            {
    
                Logger.Fatal("这是Fatal级日志");//此处调用日志记录函数记录日志
                Logger.Error("这是Error级日志");
                Logger.Warn("这是Warn级日志");
                Logger.Info("这是Info级日志");
                Logger.Debug("这是Debug级日志");
    
                return View();
            }
    

      

    具体步骤:

    1、项目创建Core web项目

    2、引用log4net

    3、右击项目选择创建Log4Net.config 并配置

    4、创建辅助类。

    5、在控制器内使用。

      

    .FrameWork的配置

    1、创建基于.FrameWork的空的MVC项目并添加Log4Net的Nuget包

    加入

    二、创建Log4Net.config类。,参考以上配置即可。

    三、创建辅助对LogNet.config类操作的辅助类,参考以上配置即可

    (区别-其他没有什么改变:Core是自动加载Log4Net对象,FrameWordk则是通过指定方式-具体需要第四步注册AssemblyInfo.cs并具体指定Log4Net对象)。

    using log4net;
    using log4net.Config;
    using System;
    using System.IO;
    
    namespace mytest
    {
        /// <summary>
        /// Logger是直接和应用程序交互的组件。Logger只是产生日志,然后由它引用的Appender记录到指定的媒介,并由Layout控制输出格式。
        /// </summary>
        public class Logger
        {
            private static ILog logger;
            static Logger()
            {
                if (logger == null)
                {
                    XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
                    logger = LogManager.GetLogger(typeof(Logger));
                }
            }
    
            /// <summary>
            /// (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。 下面演示根据每个日志等级生成对应的一个文件。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Debug(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Debug(message);
                else
                    logger.Debug(message, exception);
            }
    
            /// <summary>
            /// INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Info(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Info(message);
                else
                    logger.Info(message, exception);
            }
    
            /// <summary>
            /// WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Warn(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Warn(message);
                else
                    logger.Warn(message, exception);
            }
    
            /// <summary>
            /// (一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Error(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Error(message);
                else
                    logger.Error(message, exception);
            }
    
            /// <summary>
            /// FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Fatal(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Fatal(message);
                else
                    logger.Fatal(message, exception);
            }
    
        }
    }
    

      

      

    四、在AssemblyInfo.cs中注册这个Log4Net.config,不然是不会自动生成text文件的。

    只需要添加一行代码:

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

      

     

    五、简单使用

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace mytest.Controllers
    {
        public class HomeController : Controller
        {
            // GET: Home
            public ActionResult Index()
            {
                Logger.Fatal("这是Fatal级日志");//此处调用日志记录函数记录日志
                Logger.Error("这是Error级日志");
                Logger.Warn("这是Warn级日志");
                Logger.Info("这是Info级日志");
                Logger.Debug("这是Debug级日志");
    
                return View();
            }
        }
    }
    

      

      

    即可

    具体目录结构

    注意:如果不行 则Log4Net.config类属性设置始终复制 即可

    Log4net在类库中的用法

    一、创建Common类库,并分别向项目和类库中添加Log4net包。

    二、log4net的配置文件如上,设置此文件的属性复制到输出目录为:始终复制。注意这一项很重要。

    也可以系统配置文件Web.config,普通应用的配置文件 为App.config,asp.net的配置文件为Web.config。

    三、添加引用到程序集——在Global.asax的Application_Start事件中加入初始化代码:

        public class MvcApplication : System.Web.HttpApplication
        {
            private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                RouteConfig.RegisterRoutes(RouteTable.Routes);
    
            }
        }

    四、log4net配置文件放在项目内,并且在项目的AssemblyInfo.cs里面加上[assembly: log4net.Config.XmlConfigurator()],这样项目工程和log4net就 建立了关联

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

     五、类库内仅仅放入对log4net操作类即可。

    using log4net;
    using log4net.Config;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Common 
    {
        /// <summary>
        /// Logger是直接和应用程序交互的组件。Logger只是产生日志,然后由它引用的Appender记录到指定的媒介,并由Layout控制输出格式。
        /// </summary>
        public class Logger
        {
            public static ILog logger => LogManager.GetLogger("MMISLogger");
    
            /// <summary>
            /// (调试信息):记录系统用于调试的一切信息,内容或者是一些关键数据内容的输出。 下面演示根据每个日志等级生成对应的一个文件。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Debug(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Debug(message);
                else
                    logger.Debug(message, exception);
            }
    
            /// <summary>
            /// INFO(一般信息):记录系统运行中应该让用户知道的基本信息。例如,服务开始运行,功能已经开户等。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Info(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Info(message);
                else
                    logger.Info(message, exception);
            }
    
            /// <summary>
            /// WARN(警告):记录系统中不影响系统继续运行,但不符合系统运行正常条件,有可能引起系统错误的信息。例如,记录内容为空,数据内容不正确等。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Warn(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Warn(message);
                else
                    logger.Warn(message, exception);
            }
    
            /// <summary>
            /// (一般错误):记录系统中出现的导致系统不稳定,部分功能出现混乱或部分功能失效一类的错误。例如,数据字段为空,数据操作不可完成,操作出现异常等。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Error(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Error(message);
                else
                    logger.Error(message, exception);
            }
    
            /// <summary>
            /// FATAL(致命错误):记录系统中出现的能使用系统完全失去功能,服务停止,系统崩溃等使系统无法继续运行下去的错误。例如,数据库无法连接,系统出现死循环。
            /// </summary>
            /// <param name="message"></param>
            /// <param name="exception"></param>
            public static void Fatal(string message, Exception exception = null)
            {
                if (exception == null)
                    logger.Fatal(message);
                else
                    logger.Fatal(message, exception);
            }
    
        }
    }

    六、使用方式

    调用com类库的方法

                Logger.Fatal("这是Fatal级日志");//此处调用日志记录函数记录日志
                Logger.Error("这是Error级日志");
                Logger.Warn("这是Warn级日志");
                Logger.Info("这是Info级日志");
                Logger.Debug("这是Debug级日志");

     

  • 相关阅读:
    使用Spring的MailSender发送邮件
    使用Spring的MailSender发送邮件
    C# List源码分析(二)
    EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图
    EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图
    Android Studio快捷键指南(本文持续更新)
    EventBus3.0使用总结
    hihoCoder #1054 滑动解锁
    hihoCoder #1069 最近公共祖先·三
    hdu 4411 Arrest
  • 原文地址:https://www.cnblogs.com/fger/p/10729088.html
Copyright © 2020-2023  润新知