log4net .net6的应用程序标准案例

log4net .net6的应用程序标准案例

因为.net5及以上版本的Winform与WPF已经没有AssemblyInfo.cs文件,所以需要静态注入.

第一步 安装log4net

1.使用命令方法

Install-Package log4net

2.通过NuGet直接搜索进行安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n841D1z1-1669279966884)(C:\Users\CTI-C#2\AppData\Roaming\Typora\typora-user-images\image-20221124163827956.png)]

第二步 编写log4net配置参数

1.添加 log4net.config 文件并更改属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ISr6Ly5-1669279827932)(C:\Users\CTI-C#2\AppData\Roaming\Typora\typora-user-images\image-20221124163827956.png)]

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值