log4net 的简单配置
安装 Nuget 包
▲ 这个没什么说的。
log4net.config
右键项目新建程序配置:
log4net.config
<?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="Log\\Info\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_INFO''.log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [thread:%t] %-3p %F line:%L func:%c - %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="Log\\Debug\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_DEBUG''.log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [thread:%t] %-5p %7c - %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="Log\\Error\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_ERROR''.log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [thread:%t] %p %c - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN" />
<levelMax value="FATAL"/>
</filter>
</appender>
<root>
<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
<!--系统上线初期或发生异常可将此Level设定为DEBUG或ALL-->
<level value="ALL" />
<appender-ref ref="InfoAppender" />
<appender-ref ref="DebugAppender" />
<appender-ref ref="ErrorAppender" />
</root>
</log4net>
</configuration>
自动复制配置文件
LogHelper 类包装
public static class LogHelper
{
static LogHelper()
{
//log4net.Config.XmlConfigurator.Configure();
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("./log4net.config")); // 设置更新是自动复制
}
private static ILog logInfo = LogManager.GetLogger("Default");
/// <summary>
/// 自定义方法名,同一个方法中可只传一次
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
public static ILog GetLogger(string className)
{
logInfo = LogManager.GetLogger(className);
return logInfo;
}
/// <summary>
/// 记录Info日志
/// </summary>
/// <param name="info"></param>
public static void Info(string info)
{
if (logInfo.IsInfoEnabled && !string.IsNullOrEmpty(info))
{
logInfo.Info(info);
}
}
/// <summary>
/// 记录error日志
/// </summary>
/// <param name="info"></param>
public static void Error(string info)
{
if (!string.IsNullOrEmpty(info))
{
logInfo.Error(info);
}
}
/// <summary>
/// 记录debug日志
/// </summary>
/// <param name="info"></param>
public static void Debug(string info)
{
if (logInfo.IsDebugEnabled && !string.IsNullOrEmpty(info))
{
logInfo.Debug(info);
}
}
/// <summary>
/// 记录Fatal日志 致命错误
/// </summary>
/// <param name="info"></param>
public static void Fatal(string info)
{
logInfo.Fatal(info);
}
/// <summary>
/// 警告信息
/// </summary>
/// <param name="info"></param>
public static void Warn(string info)
{
logInfo.Warn(info);
}
}
AssemblyInfo.cs 配置
新增:
新增:
//设置独立配置文件,log4net.config
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
使用
其他程序集使用的时候也需要引用 log4net.dll
。如果需要增加新的 log
对象:GetLogger(string className)
一下。
更新下配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!--配置节点-->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!--自定义 logger-->
<appender name="CSVAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="D:\\Data\\RunData\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'''.csv'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy'/'MM'/'dd HH':'mm':'ss},%m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<!--默认 Root logger-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="Log\\Info\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_INFO''.log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [thread:%t] %-3p %F line:%L func:%c - %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="Log\\Debug\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_DEBUG''.log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [thread:%t] %-5p %7c - %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="Log\\Error\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_ERROR''.log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [thread:%t] %p %c - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="ERROR"/>
</filter>
<!--<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR" />
</filter>-->
</appender>
<root>
<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
<!--系统上线初期或发生异常可将此Level设定为DEBUG或ALL-->
<level value="ALL" />
<appender-ref ref="InfoAppender" />
<appender-ref ref="DebugAppender" />
<appender-ref ref="ErrorAppender" />
</root>
<!--自定义 Logger-->
<logger name="Custom_CSV" additivity="false">
<level value="ALL"/>
<appender-ref ref="CSVAppender" />
</logger>
</log4net>
</configuration>
自定义一个暴力的
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!--配置节点-->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!--自定义 csv logger-->
<appender name="CSVAppender_1" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="D:\\Data\\RunData\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_WorkData''.csv'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<!--<header value="时间,标题1,标题1,标题1 " />-->
<param name="ConversionPattern" value="%m%n" />
<!--<footer value="时间,设备号,上料Tray盘SN,治具SN,治具已用次数,治具1穴,治具2穴 " />-->
<!--<footer value="时间,标题1,标题1,标题1 " />-->
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="CSVAppender_2" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="D:\\Data\\RunData\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_WorkData''.csv'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<!--<header value="时间,标题1,标题1,标题1 " />-->
<param name="ConversionPattern" value="%m%n" />
<!--<footer value="时间,标题1,标题2,标题3 " />-->
<!--<footer value="时间,标题1,标题1,标题1 " />-->
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="CSVAppender_3" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="D:\\Data\\RunData\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_WorkData''.csv'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<!--<header value="时间,标题1,标题1,标题1 " />-->
<param name="ConversionPattern" value="%m%n" />
<!--<footer value="时间,设备号,治具1SN,治具1使用次数,治具2SN,治具2使用次数,压力1,压力2,压力3,压力4 " />-->
<!--<footer value="时间,标题1,标题1,标题1 " />-->
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="CSVAppender_4" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="D:\\Data\\RunData\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_WorkData''.csv'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<!--<header value="时间,标题1,标题1,标题1 " />-->
<param name="ConversionPattern" value="%m%n" />
<!--<footer value="时间,标题1,标题2,标题3 " />-->
<!--<footer value="时间,标题1,标题1,标题1 " />-->
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="CSVAppender_5" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="D:\\Data\\RunData\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_WorkData''.csv'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<!--<header value="时间,标题1,标题1,标题1 " />-->
<param name="ConversionPattern" value="%m%n" />
<!--<footer value="时间,标题1,标题2,标题3 " />-->
<!--<footer value="时间,标题1,标题1,标题1 " />-->
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="CSVAppender_6" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="D:\\Data\\RunData\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_WorkData''.csv'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<!--<header value="时间,标题1,标题1,标题1 " />-->
<param name="ConversionPattern" value="%m%n" />
<!--<footer value="时间,标题1,标题2,标题3 " />-->
<!--<footer value="时间,标题1,标题1,标题1 " />-->
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="CSVAppender_7" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="D:\\Data\\RunData\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_WorkData''.csv'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<!--<header value="时间,标题1,标题1,标题1 " />-->
<param name="ConversionPattern" value="%m%n" />
<!--<footer value="时间,标题1,标题2,标题3 " />-->
<!--<footer value="时间,标题1,标题1,标题1 " />-->
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="CSVAppender_8" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="D:\\Data\\RunData\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_WorkData''.csv'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.DynamicPatternLayout">
<param name="ConversionPattern" value="%m%n" />
<!--<param name="Header" value="时间,设备号,下料TraySN,治具SN,治具使用次数,治具穴位,Tray盘穴位%newline" />-->
<!--<param name="Footer" value="时间,设备号,下料TraySN,治具SN,治具使用次数,治具穴位,Tray盘穴位%newline" />-->
</layout>
<!--<layout type="log4net.Layout.PatternLayout">
--><!--<header value="时间,标题1,标题1,标题1 " />--><!--
<param name="ConversionPattern" value="%m%n" />
<footer value="时间,设备号,下料TraySN,治具SN,治具使用次数,治具穴位,Tray盘穴位 " />
--><!--<footer value="时间,标题1,标题1,标题1 " />--><!--
</layout>-->
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<!--默认 Root logger-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="Log\\Info\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_INFO''.log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %-5p - %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="Log\\Debug\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_DEBUG''.log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [thread:%t] %-3p %F line:%L func:%c - %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name="File" value="Log\\Error\\" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log保留天数-->
<param name="MaxSizeRollBackups" value="30" />
<!--log文件大小-->
<param name="maximumFileSize" value="100MB"/>
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2008-08-31.log-->
<param name="DatePattern" value="yyyy-MM-dd'_ERROR''.log'" />
<!--日志根据日期滚动-->
<param name="RollingStyle" value="Composite" />
<!--最小锁定模型以允许多个进程可以写入同一个文件-->
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [thread:%t] %-3p %F line:%L func:%c - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="ERROR"/>
</filter>
<!--<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR" />
</filter>-->
</appender>
<root>
<!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
<!--系统上线初期或发生异常可将此Level设定为DEBUG或ALL-->
<level value="ALL" />
<appender-ref ref="InfoAppender" />
<appender-ref ref="DebugAppender" />
<appender-ref ref="ErrorAppender" />
</root>
<!--自定义 Logger-->
<logger name="Custom_CSV_1" additivity="false">
<level value="ALL"/>
<appender-ref ref="CSVAppender_1" />
</logger>
<logger name="Custom_CSV_2" additivity="false">
<level value="ALL"/>
<appender-ref ref="CSVAppender_2" />
</logger>
<logger name="Custom_CSV_3" additivity="false">
<level value="ALL"/>
<appender-ref ref="CSVAppender_3" />
</logger>
<logger name="Custom_CSV_4" additivity="false">
<level value="ALL"/>
<appender-ref ref="CSVAppender_4" />
</logger>
<logger name="Custom_CSV_5" additivity="false">
<level value="ALL"/>
<appender-ref ref="CSVAppender_5" />
</logger>
<logger name="Custom_CSV_6" additivity="false">
<level value="ALL"/>
<appender-ref ref="CSVAppender_6" />
</logger>
<logger name="Custom_CSV_7" additivity="false">
<level value="ALL"/>
<appender-ref ref="CSVAppender_7" />
</logger>
<logger name="Custom_CSV_8" additivity="false">
<level value="ALL"/>
<appender-ref ref="CSVAppender_8" />
</logger>
</log4net>
</configuration>
包装类:
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Logger
{
// 互联网参考:
// https://blog.csdn.net/baidu_37842527/article/details/125851930
public static class LogHelper
{
static LogHelper()
{
//log4net.Config.XmlConfigurator.Configure();
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("./log4net.config")); // 设置更新是自动复制
}
private static ILog logInfo = LogManager.GetLogger("Default"); //选择<logger name="Default">的配置, 找不到就用的<root></root>下面的默认对象?
/// <summary>
/// 自定义方法名,同一个方法中可只传一次
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
public static ILog GetLogger(string className = null)
{
if (string.IsNullOrEmpty(className))
{
return LogManager.GetLogger("Default");
}
logInfo = LogManager.GetLogger(className);
return logInfo;
}
/// <summary>
/// 记录Info日志
/// </summary>
/// <param name="info"></param>
public static void Info(string info)
{
if (logInfo.IsInfoEnabled && !string.IsNullOrEmpty(info))
{
logInfo.Info(info);
}
}
/// <summary>
/// 记录error日志
/// </summary>
/// <param name="info"></param>
public static void Error(string info)
{
if (!string.IsNullOrEmpty(info))
{
logInfo.Error(info);
}
}
/// <summary>
/// 记录debug日志
/// </summary>
/// <param name="info"></param>
public static void Debug(string info)
{
if (logInfo.IsDebugEnabled && !string.IsNullOrEmpty(info))
{
logInfo.Debug(info);
}
}
/// <summary>
/// 记录Fatal日志 致命错误
/// </summary>
/// <param name="info"></param>
public static void Fatal(string info)
{
logInfo.Fatal(info);
}
/// <summary>
/// 警告信息
/// </summary>
/// <param name="info"></param>
public static void Warn(string info)
{
logInfo.Warn(info);
}
}
}
参考: