.NET Core 3.1 + Log4Net 配置多个不同日志输出
关键词:.NET Core 3.1;Log4Net;多日志分隔;
认知尚浅,如有高见,愿闻其详。
需求
在开发中,我们常常会遇到这样一种业务场景,目前在开发的A系统,需要去调用某个机构、某个公司B系统的接口,以此满足A系统的业务需求。这就衍生出一个问题,为了后期排错方便,我们不能把调用B系统的接口日志与我们A系统的日志记录在一起,需要进行分开文件夹管理。
Log4Net下解决思路
碎碎念:起初,想到的很简单,不就是多个LogHelper类的问题嘛,直接new 一个就行了。但是看了实际情况,并不是这样的,Log4Net在我目前的使用中只需要进行配置文件的配置后注入就可以使用了(没有深入的了解),后来尝试着往配置文件上去实现,想着,多加一个Info标签不就好了,当然,肯定没实现(太年轻)日志全记一起了,只能够爬帖子了。网上找了一大堆的方式,最后发现,通过增加
1、配置中添加
2、创建多个LogHelper(根据需要创建),并进行GetLogger("name")获取ILog实例
3、日志记录
其实实现很简单,就是根据logger节点名称,去获取配置新,生成log实例,并进行配置后进行日志输出。
步骤
1、配置
<logger name="Transfer" additivity="false">
<level value="ALL" />
<appender-ref ref="TransferErrorAppender" />
<appender-ref ref="TransferInfoAppender" />
</logger>
其中additivity="false"是一定要配置的,不然会继承root节点的appender,导致日志依旧会混进住日志中
2、创建LogHelper
public static readonly log4net.ILog log = log4net.LogManager.GetLogger("Transfer");
static LogHelper()
{
log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
}
public static void Info(string info)
{
if (log.IsInfoEnabled)
{
log.Info(info);
}
}
完整配置:
<log4net>
<!-- 错误日志附加介质-->
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径-->
<param name="File" value="ApiLogs\\ApiLogs\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="1000" />
<!--最大文件大小-->
<param name="MaxFileSize" value="10240" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:年-月/年-月-日/2008-08-31_ERROR.log-->
<param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'ERROR'.'log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Date" />
<!--信息日志布局-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n==========%n【日志级别】:%-5level%n【记录时间】:%date %n【执行时间】:[%r]毫秒%n%message%n" />
</layout>
<!--FATAL > ERROR > WARN > INFO > DEBUG-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<!-- 信息日志附加介质-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径-->
<param name="File" value="ApiLogs\\ApiLogs\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="1" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:年-月/年-月-日/2008-08-31_INFO.log-->
<param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'INFO'.'log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Date" />
<!--信息日志布局-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n==========%n【日志级别】:%-5p%n【记录时间】:%d [%t]%n【信息详情】:%m%n" />
</layout>
<!--FATAL > ERROR > WARN > INFO > DEBUG-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<!-- 信息日志附加介质-->
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径-->
<param name="File" value="ApiLogs\\ApiLogs\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="1" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:年-月/年-月-日/2008-08-31_DEBUG.log-->
<param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'DEBUG'.'log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Date" />
<!--信息日志布局-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n==========%n【日志级别】:%-5p%n【记录时间】:%d [%t]%n【信息详情】:%m%n" />
</layout>
<!--FATAL > ERROR > WARN > INFO > DEBUG-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>
<!-- 错误日志附加介质-->
<appender name="TransferErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径-->
<param name="File" value="ApiLogs\\TransferLogs\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="1000" />
<!--最大文件大小-->
<param name="MaxFileSize" value="10240" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:年-月/年-月-日/2008-08-31_ERROR.log-->
<param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'ERROR'.'log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Date" />
<!--信息日志布局-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n==========%n【日志级别】:%-5level%n【记录时间】:%date %n【执行时间】:[%r]毫秒%n%message%n" />
</layout>
<!--FATAL > ERROR > WARN > INFO > DEBUG-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<!-- 信息日志附加介质-->
<appender name="TransferInfoAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径-->
<param name="File" value="ApiLogs\\TransferLogs\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="100" />
<param name="MaxFileSize" value="1" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:年-月/年-月-日/2008-08-31_INFO.log-->
<param name="DatePattern" value="yyyy-MM/yyyy-MM-dd/yyyy-MM-dd_'INFO'.'log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Date" />
<!--信息日志布局-->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%n==========%n【日志级别】:%-5p%n【记录时间】:%d [%t]%n【信息详情】:%m%n" />
</layout>
<!--FATAL > ERROR > WARN > INFO > DEBUG-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="InfoAppender" />
<appender-ref ref="ErrorAppender" />
<appender-ref ref="DebugAppender" />
</root>
<logger name="Transfer" additivity="false">
<level value="ALL" />
<appender-ref ref="TransferErrorAppender" />
<appender-ref ref="TransferInfoAppender" />
</logger>
</log4net>