Log4net——.NET开源日志记录组件的基本应用【分类库可移植使用】

版权声明:本文为博主原创文章,欢迎各位转载,但须注明出处 https://blog.csdn.net/qq_34202873/article/details/83344907

Log4net——.NET开源日志记录组件的基本应用【分类库使用】

简单介绍

log4net是.Net下一个非常好用的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。
该博文主要介绍如何将其分类库使用,日后直接套用。

1、先安装log4net组件,直接在NuGet下载依赖包即可

在这里插入图片描述

2、在类库文件AssemblyInfo.cs最下方加代码

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

在这里插入图片描述

3、添加警告等级的枚举类LogLevel

namespace Log4net.Logger
{
    public enum LogLevel
    {
        Debug,
        Info,
        Warn,
        Error,
        Fatal
    }
}

4、添加主体类LogUtil

4.1 在主体类中先创建单例模式

private static LogUtil instance;
private LogUtil() { }
public static LogUtil Instance
{
    get
    {
        return instance ?? (instance = new LogUtil());
    }
}

4.2封装属性以便查看和调用

private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public bool IsDebugEnabled
{
    get { return log.IsDebugEnabled; }
}
public bool IsInfoEnabled
{
    get { return log.IsInfoEnabled; }
}
public bool IsWarnEnabled
{
    get { return log.IsWarnEnabled; }
}
public bool IsErrorEnabled
{
    get { return log.IsErrorEnabled; }
}
public bool IsFatalEnabled
{
    get { return log.IsFatalEnabled; }
}

4.3封装方法

#region  [ Error ]

public void Error(string message)
{
    if (this.IsErrorEnabled)
    {
        this.Log(LogLevel.Error, message);
    }
}

public void Error(string message, Exception exception)
{
    if (this.IsErrorEnabled)
    {
        this.Log(LogLevel.Error, message, exception);
    }
}

public void ErrorFormat(string format, params object[] args)
{
    if (this.IsErrorEnabled)
    {
        this.Log(LogLevel.Error, format, args);
    }
}

public void ErrorFormat(string format, Exception exception, params object[] args)
{
    if (this.IsErrorEnabled)
    {
        this.Log(LogLevel.Error, string.Format(format, args), exception);
    }
}
#endregion

#region  [ Fatal ]

public void Fatal(string message)
{
    if (this.IsFatalEnabled)
    {
        this.Log(LogLevel.Fatal, message);
    }
}

public void Fatal(string message, Exception exception)
{
    if (this.IsFatalEnabled)
    {
        this.Log(LogLevel.Fatal, message, exception);
    }
}

public void FatalFormat(string format, params object[] args)
{
    if (this.IsFatalEnabled)
    {
        this.Log(LogLevel.Fatal, format, args);
    }
}

public void FatalFormat(string format, Exception exception, params object[] args)
{
    if (this.IsFatalEnabled)
    {
        this.Log(LogLevel.Fatal, string.Format(format, args), exception);
    }
}
#endregion

4.4 最后再加上两个判断方法


private void Log(LogLevel level, string format, params object[] args)
{
    switch (level)
    {
        case LogLevel.Debug:
            log.DebugFormat(format, args);
            break;
        case LogLevel.Info:
            log.InfoFormat(format, args);
            break;
        case LogLevel.Warn:
            log.WarnFormat(format, args);
            break;
        case LogLevel.Error:
            log.ErrorFormat(format, args);
            break;
        case LogLevel.Fatal:
            log.FatalFormat(format, args);
            break;
    }
}


private void Log(LogLevel level, string message, Exception exception)
{
    switch (level)
    {
        case LogLevel.Debug:
            log.Debug(message, exception);
            break;
        case LogLevel.Info:
            log.Info(message, exception);
            break;
        case LogLevel.Warn:
            log.Warn(message, exception);
            break;
        case LogLevel.Error:
            log.Error(message, exception);
            break;
        case LogLevel.Fatal:
            log.Fatal(message, exception);
            break;
    }
}

5、在其他类库中使用log4net类库

5.1生成上一个类库,并在需要使用的类库中添加该dll

在这里插入图片描述

5.2 添加配置文件Log4net.config,并前其属性改成“始终复制”

在这里插入图片描述

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net debug="true">

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log\"/>
      <appendToFile value="true"/>
      <rollingStyle value="Composite"/>
      <MaxFileSize value="1048576"/>
      <!--1M-->
      <MinFileSize value="8192"/>
      <!--8K-->
      <MaxSizeRollBackups value="30"/>
      <datePattern value="'application_'yyyy-MM-dd'.log'"/>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <staticLogFileName value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Debug" />
        <param name="LevelMax" value="Warn" />
      </filter>
    </appender>

    <appender name="RollingErrorFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log\Error\"/>
      <appendToFile value="true"/>
      <rollingStyle value="Composite"/>
      <MaxFileSize value="8192"/>
      <!--1M-->
      <MinFileSize value="8192"/>
      <!--8K-->
      <MaxSizeRollBackups value="30"/>
      <datePattern value="'Error_'yyyy-MM-dd'.log'"/>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <staticLogFileName value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Error" />
        <param name="LevelMax" value="Error" />
      </filter>
    </appender>

    <root>
      <level value="Debug"/>
      <!--文件形式记录日志-->
      <appender-ref ref="RollingLogFileAppender"/>
      <appender-ref ref="RollingErrorFileAppender"/>
    </root>

  </log4net>
</configuration>

6、使用,这里我以Winform为例创建了Button的点击事件

private void btnExportMsg_Click(object sender, EventArgs e)
{		
	LogUtil.Instance.Debug("Debug Info");		
	LogUtil.Instance.Warn("Warn Info");
	LogUtil.Instance.Error("Eorror Info");
	LogUtil.Instance.Fatal("Fatal Info");
	LogUtil.Instance.Info("Info Info");
}

7、文件查看,到Debug/Log中即可查看

在这里插入图片描述

8、建议:需要更详细了解如何使用的话,可详细查看配置文件的各个内容,或者查看其他博客的详细介绍,本文只介绍如何简单使用以及可移植使用。

9、Demo下载:https://download.csdn.net/download/qq_34202873/10741486

展开阅读全文

没有更多推荐了,返回首页