Log4Net 使用技巧
1. 利用nuget对log4net的引用
2. 在项目中添加log4Net.Config文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <root> <level value="ALL" /> <appender-ref ref="RollingLogFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="[%date] %level [%thread][%c{1}:%line] - %m%n" /> </layout> </appender> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" > <param name="File" value="logss/aa.txt" /> <!--<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />--> <param name="DatePattern" value="yyyy-MM-dd".log"" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="StaticLogFileName" value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %level %thread %logger - %message %newline" /> - </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> </log4net> </configuration>
StaticLogFileName 为true时File参数就要有固定的文件名,如果为false时 只需要写文件夹名称即可
<conversionPattern value="%date %level %thread %logger - %message %newline" /> 在文件中输出的内容格式
<param name="DatePattern" value="yyyy-MM-dd".log"" /> 动态生成文件的格式
当生成的日志过大时可以采用按小时生成并且创建日期文件夹
<param name="DatePattern" value="yyyy-MM-dd/yyyy-MM-dd-HH".log"" />
3. 对于AssemblyInfo.cs文件添加 特性
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 注意此处的log2net.config与刚才添加的文件名保持一致
4. 添加记日志的Helper类
public class Log4NetHelper { private static readonly ILog logger = LogManager.GetLogger("RollingLogFileAppender"); public static void WriteLog(string message) { logger.Info(message); } }
日志可以分组:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <log4net> <root> <level value="ALL" /> </root> <logger name="CalledLogger"> <level value="ALL" /> <appender-ref ref="CalledInfoAppender" /> <appender-ref ref="CalledErrorAppender" /> </logger> <logger name="CallingLogger"> <level value="ALL" /> <appender-ref ref="CallingInfoAppender" /> <appender-ref ref="CallingErrorAppender" /> </logger> <logger name="InfoLogger"> <level value="ALL" /> <appender-ref ref="InfoAppender" /> <appender-ref ref="ErrorAppender" /> </logger> <!-- 被调函数记录调用参数和调用返回结果 --> <appender name="CalledInfoAppender" type="log4net.Appender.RollingFileAppender,log4net" > <param name="File" value="Logs\CalledInfo\" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy-MM-dd".log"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <!-- 被调函数记录内部错误原因 --> <appender name="CalledErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" > <param name="File" value="Logs\CalledError\" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy-MM-dd".log"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!-- 调用接口记录调用参数和调用返回结果--> <appender name="CallingInfoAppender" type="log4net.Appender.RollingFileAppender,log4net" > <param name="File" value="Logs\CallingInfo\" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy-MM-dd".log"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <!-- 调用返回错误是记录错误信息 --> <appender name="CallingErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" > <param name="File" value="Logs\CallingError\" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy-MM-dd".log"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> <!-- 程序内部调试日志 --> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender,log4net" > <param name="File" value="Logs\LogsInfo\" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy-MM-dd".log"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="INFO" /> </filter> </appender> <!-- 程序内部调试错误日志 --> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender,log4net" > <param name="File" value="Logs\LogsError\" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy-MM-dd".log"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="ERROR" /> </filter> </appender> </log4net> </configuration>
c# 调用程序
public class Log4NetHelper { private static readonly ILog logger = LogManager.GetLogger("RollingLogFileAppender"); private static readonly ILog calledLogger = LogManager.GetLogger("CalledLogger"); private static readonly ILog callingLogger = LogManager.GetLogger("CallingLogger"); private static readonly ILog infoLogger = LogManager.GetLogger("InfoLogger"); public static void WriteLog(string message) { //log4net.Config.XmlConfigurator.Configure(); logger.Info(message); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)