- 官方配置信息
Apache log4net – Apache log4net: Config Examples - Apache log4net
- 官方示例实现RollingFileAppender
- Stack Overflow
c# - How I can set log4net to log my files into different folders each day? - Stack Overflow
- 1、上log4net.conf 配置信息
<?xml version="1.0" encoding="utf-8" ?> <log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <root> <!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF --> <level value="ALL" /> <appender-ref ref="ErrorRollingFileAppender" /> <appender-ref ref="WarnRollingFileAppender" /> <appender-ref ref="InfoRollingFileAppender" /> <appender-ref ref="DebugRollingFileAppender" /> </root> <!--一般错误日志定义,用于记录已知需处理的与未捕获的异常--> <!--日志输出格式:[时间]:类名 线程号 消息--> <appender name="ErrorRollingFileAppender" type="System.MyRollingFileAppender"> <!-- 自定义删除几天前的日志 --> <param name= "MyOutDateDays" value= "30"/> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="ERROR" /> <levelMax value="FATAL" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <file value="logs/" /> <rollingStyle value="Composite" /> <!--保留文件的数量--> <maxSizeRollBackups value="20" /> <!--保留文件的大小 可用的单位:KB|MB|GB--> <maximumFileSize value="300MB" /> <datePattern value="yyyy-MM-dd/"Error.log"" /> <staticLogFileName value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="【%d{HH:mm:ss.fff}】 %c T%t %n%m%n" /> </layout> </appender> <!--警告日志定义,用于记录已知不需处理的异常,系统警告信息--> <!--日志输出格式:[时间]:类名 线程号 消息--> <appender name="WarnRollingFileAppender" type="System.MyRollingFileAppender"> <!-- 自定义删除几天前的日志 --> <param name= "MyOutDateDays" value= "30"/> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="WARN" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <file value="logs/" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <!--保留文件的数量--> <maxSizeRollBackups value="20" /> <!--保留文件的大小 可用的单位:KB|MB|GB--> <maximumFileSize value="300MB" /> <datePattern value="yyyy-MM-dd/"Warn.log"" /> <staticLogFileName value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t %m%n" /> </layout> </appender> <!--信息日志定义,用于记录用户相关信息--> <!--日志输出格式:[时间]:消息--> <appender name="InfoRollingFileAppender" type="System.MyRollingFileAppender"> <!-- 自定义删除几天前的日志 --> <param name= "MyOutDateDays" value= "30"/> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="INFO" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <file value="logs/" /> <appendToFile value="true" /> <!--保留文件的数量--> <maxSizeRollBackups value="20" /> <!--保留文件的大小 可用的单位:KB|MB|GB--> <maximumFileSize value="300MB" /> <rollingStyle value="Composite" /> <datePattern value="yyyy-MM-dd/"Info.log"" /> <staticLogFileName value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%d{HH:mm:ss}] (%c) %m%n" /> </layout> </appender> <!--信息日志定义,用于收集开发调试信息--> <!--日志输出格式:[时间]:类名 线程号 消息--> <appender name="DebugRollingFileAppender" type="System.MyRollingFileAppender"> <!-- 自定义删除几天前的日志 --> <param name= "MyOutDateDays" value= "30"/> <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="DEBUG" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <file value="logs/" /> <appendToFile value="true" /> <!--保留文件的数量--> <maxSizeRollBackups value="20" /> <!--保留文件的大小 可用的单位:KB|MB|GB--> <maximumFileSize value="300MB" /> <rollingStyle value="Composite" /> <datePattern value="yyyy-MM-dd/"Debug.log"" /> <staticLogFileName value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%d{HH:mm:ss.fff}] %c T%t: %m%n" /> </layout> </appender> </log4net>
2、自定义RollingFileAppender
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace System { public class MyRollingFileAppender : log4net.Appender.RollingFileAppender { /// <summary> /// 自动删除N天之前的日志 须大于0 ///例如日志处于D:\bin\Debug\Logs\2022-09-28\20220928_Error.log -> D:\bin\Debug\Logs\下文件夹 大于天数的日志文件夹会被删除 /// </summary> public int MyOutDateDays { get; set; } protected override void OpenFile(string fileName, bool append) { base.OpenFile(fileName, append); } /// <summary> /// 自定义自己的操作 /// </summary> public override void ActivateOptions() { base.ActivateOptions(); //自定义删除操作 DeleteLogFilesForOutDate(); } private void DeleteLogFilesForOutDate() { try { string pBasepath = System.IO.Path.GetDirectoryName(File); //获取目录 string strBasepath = Path.GetDirectoryName(pBasepath); foreach (string dirs in Directory.GetDirectories(strBasepath)) { DeleteDirtorys(dirs); } } catch (Exception ex) { } } private void DeleteDirtorys(string dir) { try { string datetimename = Path.GetFileNameWithoutExtension(dir); if (DateTime.TryParse(datetimename, out var dirWithSuccessTime) == false) { //不是日期开始文件夹结束 return; } //当前的减去文件夹的名称时间天数 if ((DateTime.Now - dirWithSuccessTime).TotalDays > MyOutDateDays && MyOutDateDays > 0) { try { //强制删除文件夹 Directory.Delete(dir, true); } catch (Exception ex) { } } } catch (Exception ex) { } } } }
- 3、效果明细,自定义RollingFileAppender类读取和新增文件时,自动检查上两级下的目录是否为日期类型,检查日期名称距离今天是否大于配置的天数,删除目录下日志
标签:log4net,文件大小,string,自定义,System,using,日志 From: https://www.cnblogs.com/JohnnyLui/p/16741769.html