C# .net 6 Log4net 安装、配置 以及相关问题处理

发布时间 2023-05-05 17:41:01作者: LearnerPing

安装log4net

首先下载相关Nuget包

安装的时候注意项目的.net版本,我这里使用的是.net 6
在根目录下面新建一个配置文件 log4net.config,并且添加下面相关配置项目

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<log4net>
		<!-- 将日志以回滚文件的形式写到文件中 -->
		<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
		<!--Error-->
		<appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
			<file value="Log/" />
			<appendToFile value="true" />
			<rollingStyle value="Date" />
			<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
			<datePattern value="&quot;ErrorLogs_&quot;yyyyMMdd&quot;.log&quot;" />
			<!--日志文件名是否为静态-->
			<StaticLogFileName value="false" />
			<!--多线程时采用最小锁定-->
			<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
			<!--布局(向用户显示最后经过格式化的输出信息)-->
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%date| %-5level %newline%message%newline--------------------------------%newline" />
			</layout>
			<filter type="log4net.Filter.LevelRangeFilter">
				<levelMin value="ALL" />
				<levelMax value="FATAL" />
			</filter>
		</appender>
		<!--Error-->

		<!--Info-->
		<appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
			<!--定义文件存放位置-->
			<file value="Log/" />
			<appendToFile value="true" />
			<rollingStyle value="Date" />
			<!--日志文件名是否为静态-->
			<StaticLogFileName value="false" />
			<!--日期的格式,每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
			<datePattern value="&quot;InfoLogs_&quot;yyyyMMdd&quot;.log&quot;" />
			<!--多线程时采用最小锁定-->
			<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
			<!--布局(向用户显示最后经过格式化的输出信息)-->
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="%date| %-5level%c %newline%message%newline--------------------------------%newline" />
			</layout>
			<filter type="log4net.Filter.LevelRangeFilter">
				<levelMin value="ALL" />
				<levelMax value="WARN" />
			</filter>
		</appender>
		<!--Info-->

		<root>
			<!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
			<!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
			<!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
			<level value="ALL" />
			<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
			<appender-ref ref="ErrorLog" />
			<appender-ref ref="InfoLog" />
		</root>
	</log4net>
</configuration>

新增一个程序集文件 AssemblyInfo.cs
添加代码

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

调用方法

新建一个辅助类 logHelper.cs

 public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("InfoLog");//获取配置信息,这里的 InfoLog 和 log4net.config 里的配置命名一致
 public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("ErrorLog");
 public static void WriteLog(string info)
 {
   if (loginfo.IsInfoEnabled)
    {
                loginfo.Info(info);
    }
 }
public static void LogError(string info,Exception ex)
{
    if (logerror.IsErrorEnabled)
      {
        logerror.Error(info, ex);
      }
}

在主程序里面调用即可

日志文件未生成

解决方案:
1.确认配置代码存在

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

2.如果是程序发布或者打包的话,要复制log4net.config 到文件夹目录下,或者直接右键文件属性,设置为可以复制到输出目录

3.确认文件输出路径正确