log4net .net6的应用程序标准案例
因为.net5及以上版本的Winform与WPF已经没有AssemblyInfo.cs文件,所以需要静态注入.
第一步 安装log4net
1.使用命令方法
Install-Package log4net
2.通过NuGet直接搜索进行安装
第二步 编写log4net配置参数
1.添加 log4net.config 文件并更改属性
2.编写 log4net.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!--错误日志类-->
<logger name="logerror">
<!--日志类的名字-->
<level value="ALL" />
<!--定义记录的日志级别-->
<appender-ref ref="ErrorAppender" />
<!--记录到哪个介质中去-->
</logger>
<!--信息日志类-->
<logger name="logwarn">
<level value="ALL" />
<appender-ref ref="WarnAppender" />
</logger>
<!--信息日志类-->
<logger name="loginfo">
<level value="ALL" />
<appender-ref ref="InfoAppender" />
</logger>
<!--信息日志类-->
<logger name="logdebug">
<level value="ALL" />
<appender-ref ref="DebugAppender" />
</logger>
<!--错误日志附加介质-->
<appender name="ErroeLogInfoAppender" type="log4net.Appender.RollingFileAppender">
<!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
<param name="File" value="Log\\LogError\\"/>
<!--日志输出到exe程序这个相对目录下-->
<param name="AppendToFile" value="true"/>
<!--备份文件的个数-->
<param name="MaxFileSize" value="10240"/>
<!--输出的日志不会覆盖以前的信息-->
<param name="MaxSizeRollBackups" value="100"/>
<!--当个日志文件的最大大小-->
<param name="StaticLogFileName" value="false"/>
<!--是否使用静态文件名-->
<param name="DatePattern" value="yyyyMMddHH'.log'"/>
<!--日志文件名-->
<param name="RollingStyle" value="Date"/>
<!--文件创建的方式,这里是以Date方式创建-->
<!--错误日志布局-->
<layout type="log4net.Layout.PatternLayout">
<!--日志文本记录格式-->
<conversionPattern value="[时间:%date]%n[线程:%t]%n[行号:%l]%n[内容:%message]%n%n"/>
</layout>
</appender>
<!--警告日志附加介质-->
<appender name="WarnInfoAppender" type="log4net.Appender.RollingFileAppender">
<!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
<param name="File" value="Log\\LogWarn\\"/>
<!--日志输出到exe程序这个相对目录下-->
<param name="AppendToFile" value="true"/>
<!--备份文件的个数-->
<param name="MaxFileSize" value="10240"/>
<!--输出的日志不会覆盖以前的信息-->
<param name="MaxSizeRollBackups" value="100"/>
<!--当个日志文件的最大大小-->
<param name="StaticLogFileName" value="false"/>
<!--是否使用静态文件名-->
<param name="DatePattern" value="yyyyMMddHH'.log'"/>
<!--日志文件名-->
<param name="RollingStyle" value="Date"/>
<!--文件创建的方式,这里是以Date方式创建-->
<!--错误日志布局-->
<layout type="log4net.Layout.PatternLayout">
<!--日志文本记录格式-->
<conversionPattern value="[时间:%date]%n[线程:%t]%n[行号:%l]%n[内容:%message]%n%n"/>
</layout>
</appender>
<!--信息日志附加介质-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
<param name="File" value="Log\\LogInfo\\"/>
<!--日志输出到exe程序这个相对目录下-->
<param name="AppendToFile" value="true"/>
<!--备份文件的个数-->
<param name="MaxFileSize" value="10240"/>
<!--输出的日志不会覆盖以前的信息-->
<param name="MaxSizeRollBackups" value="100"/>
<!--当个日志文件的最大大小-->
<param name="StaticLogFileName" value="false"/>
<!--是否使用静态文件名-->
<param name="DatePattern" value="yyyyMMddHH'.log'"/>
<!--日志文件名-->
<param name="RollingStyle" value="Date" />
<!--文件创建的方式,这里是以Date方式创建-->
<!--错误日志布局-->
<layout type="log4net.Layout.PatternLayout">
<!--日志文本记录格式-->
<conversionPattern value="[时间:%date]%n[线程:%t]%n[行号:%l]%n[内容:%message]%n%n"/>
</layout>
</appender>
<!--调试日志附加介质-->
<appender name="DebugInfoAppender" type="log4net.Appender.RollingFileAppender">
<!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
<param name="File" value="Log\\LogDebug\\"/>
<!--日志输出到exe程序这个相对目录下-->
<param name="AppendToFile" value="true"/>
<!--备份文件的个数-->
<param name="MaxFileSize" value="10240"/>
<!--输出的日志不会覆盖以前的信息-->
<param name="MaxSizeRollBackups" value="100"/>
<!--当个日志文件的最大大小-->
<param name="StaticLogFileName" value="false"/>
<!--是否使用静态文件名-->
<param name="DatePattern" value="yyyyMMddHH'.log'"/>
<!--日志文件名-->
<param name="RollingStyle" value="Date"/>
<!--文件创建的方式,这里是以Date方式创建-->
<!--错误日志布局-->
<layout type="log4net.Layout.PatternLayout">
<!--日志文本记录格式-->
<conversionPattern value="[时间:%date]%n[线程:%t]%n[行号:%l]%n[内容:%message]%n%n"/>
</layout>
</appender>
</log4net>
</configuration>
日志文本记录格式参考
<!--
%M 方法名
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 :10:28,921
%l 或 %L 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
%x Used to output the NDC (nested diagnostic context) associated with the thread that generated the logging event
%X Used to output the MDC (mapped diagnostic context) associated with the thread that generated the logging event for specified key
-->
第三步 编写帮助类
namespace Log4Net日志测试程序.CommonHelper
{
public static class Log4NetHelper
{
public static ILog LogError;
public static ILog LogWarn;
public static ILog LogInfo;
public static ILog LogDebug;
static Log4NetHelper()
{
string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
string path = Path.Combine(baseDirectory, "log4net.config");
XmlConfigurator.ConfigureAndWatch(new FileInfo(path));
LogError = LogManager.GetLogger("logerroe");
LogWarn = LogManager.GetLogger("logwarn");
LogInfo = LogManager.GetLogger("loginfo");
LogDebug = LogManager.GetLogger("logdebug");
}
/// <summary>
/// 打印错误日志
/// </summary>
/// <param name="obj"></param>
public static void WriteErrorLog(object obj)
{
if (LogError.IsErrorEnabled)
{
LogError.Error(obj);
}
}
/// <summary>
/// 打印警告日志
/// </summary>
/// <param name="obj"></param>
public static void WriteWarnLog(object obj)
{
if (LogWarn.IsWarnEnabled)
{
LogWarn.Warn(obj);
}
}
/// <summary>
/// 打印信息日志
/// </summary>
/// <param name="obj"></param>
public static void WriteInfoLog(object obj)
{
if (LogInfo.IsInfoEnabled)
{
LogInfo.Info(obj);
}
}
/// <summary>
/// 打印调试日志
/// </summary>
/// <param name="obj"></param>
public static void WriteDebugLog(object obj)
{
if (LogDebug.IsDebugEnabled)
{
LogDebug.Debug(obj);
}
}
}
}
第四步 测试实例
代码
Log4NetHelper.WriteInfoLog("这是一个普通的信息");
Log4NetHelper.LogInfo.Info("这是另一个信息");
日志
[时间:2022-11-24 16:15:15,372]
[线程:1]
[行号:Log4Net日志测试程序.CommonHelper.Log4NetHelper.WriteInfoLog(F:\OneDrive\程序集\Winform\Log4Net日志测试程序\Log4Net日志测试程序\CommonHelper\Log4NetHelper.cs:32)]
[内容:这是一个普通的信息]
[时间:2022-11-24 16:15:15,426]
[线程:1]
[行号:Log4Net日志测试程序.Form1.btnInfo_Click(F:\OneDrive\程序集\Winform\Log4Net日志测试程序\Log4Net日志测试程序\Form1.cs:17)]
[内容:这是另一个信息]
总结
使用日志工具可以很方便快捷的输出想要的日志,可以将不同的信息输出到不同的日志文件,并且支持自动生成文件的功能,总之很nice
2022/11/24