一、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级日志");

 

原文地址:https://www.cnblogs.com/fger/p/10729088.html