log4net日志使用示例

一、引用log4net动态库

在项目直接引用log4net.dll文件,或者通过Nuget安装(本文使用1.2.10版本)

二、在主项目增加log4net配置文件

在主项目下添加log4net.config文件,比如有Main主项目、Common工具项目等多个项目时,需要把log4net.config放在Main项目下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
	</configSections>

	<log4net>
		<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
			<!--日志路径-->
			<param name= "File" value= "logs/info/"/>
			<!--多线程时采用最小锁定-->
			<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
			<!--是否是向文件中追加日志-->
			<param name= "AppendToFile" value= "true"/>
			<!--log保留天数-->
			<!--<param name= "MaxSizeRollBackups" value= "10"/>-->
			<!--日志文件名是否是固定不变的-->
			<param name= "StaticLogFileName" value= "false"/>
			<!--日志文件名格式为:2022-05-22.log-->
			<param name= "DatePattern" value= "yyyy-MM-dd'.txt'"/>
			<!--日志根据日期滚动-->
			<param name= "RollingStyle" value= "Date"/>
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%n%d [%t] %-5p %c [%L] - %m %n" />
			</layout>
            <!--过滤日志级别范围-->
			<filter type="log4net.Filter.LevelRangeFilter">
				<levelMin value="DEBUG" />
				<levelMax value="WARN" />
			</filter>
		</appender>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
			<!--日志路径-->
			<param name= "File" value= "logs/Error/"/>
			<!--多线程时采用最小锁定-->
			<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
			<!--是否是向文件中追加日志-->
			<param name= "AppendToFile" value= "true"/>
			<!--log保留天数-->
			<!--<param name= "MaxSizeRollBackups" value= "10"/>-->
			<!--日志文件名是否是固定不变的-->
			<param name= "StaticLogFileName" value= "false"/>
			<!--日志文件名格式为:2022-05-22.log-->
			<param name= "DatePattern" value= "yyyy-MM-dd'.txt'"/>
			<!--日志根据日期滚动-->
			<param name= "RollingStyle" value= "Date"/>
			<layout type="log4net.Layout.PatternLayout">
				<param name="ConversionPattern" value="%n%d [%t] %-5p %c [%L] - %m %n" />
			</layout>
            <!--过滤日志级别范围-->
			<filter type="log4net.Filter.LevelRangeFilter"> 
        <levelMin value="ERROR" />
				<levelMax value="FATAL" />
      </filter>
		</appender>

		<root>
			<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
			<level value="all" />
			<appender-ref ref="InfoAppender"/>
			<appender-ref ref="ErrorAppender"/>
		</root>
	</log4net>
</configuration>

三、配置文件属性改为“更新复制”或“始终复制”

四、修改对应项目properties下的assmbly.cs文件,添加一些代码

修改 log4net.LogManager.GetLogger 获取实例所在的项目的assmbly.cs(我在Common工具项目添加了一个LogHelper.cs的类,日志使用时从Common.LogHelpr里面获取Logger实例;所以修改的是Common工具项目的assmbly.cs)

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

五、代码调用

//public log4net.ILog Logger = log4net.LogManager.GetLogger(typeof(ClassName));
//Logger.Info("这里是普通日志");
//Logger.Error("这里是错误日志");

//Common项目
public class LogHelper
{
    public static ILog GetLogger<T>()
    {
        return log4net.LogManager.GetLogger(typeof(T));
    }
}


//其他项目使用日志时
private ILog logger = LogHelper.GetLogger<TestClass>();
logger.Info("测试日志打印");

如需考虑线程安全,可用以下方法:

using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Helper
{
    public class LogHelper
    {
        private static object lockerInfo = new object();
        private static object lockerError = new object();

        public static void LogInfo<T>(string info)
        {
            Task.Run(() => {
                lock (lockerInfo)
                {
                    log4net.LogManager.GetLogger(typeof(T)).Info(info);
                }
            });
        }

        public static void LogError<T>(string info)
        {
            Task.Run(() => {
                lock (lockerError)
                {
                    log4net.LogManager.GetLogger(typeof(T)).Error(info);
                }
            });
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值