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");
}