Log4Net笔记(二)Apender
2010-02-27 20:13 Henry Cui 阅读(2443) 评论(0) 编辑 收藏 举报在前面的一篇文章中对log4net进行了大体的介绍(已经距离很长时间了),说明了logger、appender等组件的作用。在本篇文章中将详细说明几个常用的appender的使用。
ConsoleAppender
我们可以直接看出来ConsoleAppender的作用就是将消息输出在控制台上:
1 2 3 4 5 6 7 | <appender name= "ConsoleAppender" type= "log4net.Appender.ConsoleAppender" > <layout type= "log4net.Layout.PatternLayout" > <param name= "ConversionPattern" value= "%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> |
我们来看看一段测试代码:
1 2 3 4 5 6 7 8 9 10 11 | [Test] public void TestLogErro() { _logM.Erro( new SysLogMessage{ Message= "测试" , UserName= "Henllyee" , Category= "Debug" , }); } |
我们来看看效果:
EventLogAppender
EventLogAppender的作用是将日志写入事件查看器中。我们来看下配置:
1 2 3 4 5 | <appender name= "EventLogAppender" type= "log4net.Appender.EventLogAppender" > <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> |
看看效果:
FileAppender
FileAppender的输出源是只将消息输出的文件上。
1 2 3 4 5 6 7 8 9 10 | <appender name= "LogAllToFile" type= "log4net.Appender.FileAppender" > <file value= "G:\学习资料\Log4Net\Log4NetDemo\Log4NetDemo\bin\Debug\DemoLog.log" /> <appendToFile value= "true" /> <!--<layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%d [%t] %-5l - %m%n%n" /> </layout>--> <layout type= "HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils" > <conversionPattern value= "%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline" /> </layout> </appender> |
效果:
RollingFileAppender
RollingFileAppender是输出源也是输出到文件中,只是以自增长的方式。配置的xml代码:
1 2 3 4 5 6 7 8 9 10 11 12 | <appender name= "RollingLogFileAppender" type= "log4net.Appender.RollingFileAppender" > <param name= "File" value= "log/system_log_" /> <param name= "AppendToFile" value= "true" /> <param name= "MaxSizeRollBackups" value= "100" /> <param name= "MaximumFileSize" value= "1KB" /> <param name= "StaticLogFileName" value= "false" /> <param name= "DatePattern" value= "yyyyMMdd".log"" /> <param name= "RollingStyle" value= "Date" /> <layout type= "HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils" > <conversionPattern value= "%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline" /> </layout> </appender> |
各个参数详细说明下:
1)File:文件开头名称;
2)AppendToFile:是否追加;
3)MaxSizeRollBackups:最大变换数量(-1表示不设置);
4)MaximumFileSize:文件的最大大小;
5)StaticLogFileName:日志文件名是否为静态;
6)RollingStyle:变换的形式;
7)DatePattern:日期的格式
我们看下运行的效果:
在上面的配置中文件的大小设置并不起作用,因为RollingStype设置为了Date,当设置为Composite的时候才会起作用。
AdoNetAppender
数据库记录的Appender。看看配置的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | <appender name= "ADONetAppender" type= "log4net.Appender.ADONetAppender" > <!--BufferSize为缓冲区大小--> <param name= "BufferSize" value= "1" /> <connectionType value= "System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value= "database=HJRightPlat;server=(local);User ID=sa;Password=123456;" /> <commandText value= "INSERT INTO Sys_Log ([Date],[Thread],[Log_Level],[Logger],[Message],[Exception],[User],[Category],[URL],[Client_IP]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception,@User,@Category,@URL,@ClientIp)" /> <parameter> <parameterName value= "@log_date" /> <dbType value= "DateTime" /> <layout type= "log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value= "@thread" /> <dbType value= "String" /> <size value= "255" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%thread" /> </layout> </parameter> <parameter> <parameterName value= "@log_level" /> <dbType value= "String" /> <size value= "50" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%level" /> </layout> </parameter> <parameter> <parameterName value= "@logger" /> <dbType value= "String" /> <size value= "255" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%logger" /> </layout> </parameter> <parameter> <parameterName value= "@message" /> <dbType value= "String" /> <size value= "4000" /> <layout type= "HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils" > <conversionPattern value= "%SysMessage" /> </layout> </parameter> <parameter> <parameterName value= "@exception" /> <dbType value= "String" /> <size value= "2000" /> <layout type= "log4net.Layout.ExceptionLayout" /> </parameter> <parameter> <parameterName value= "@User" /> <dbType value= "String" /> <size value= "50" /> <layout type= "HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils" > <conversionPattern value= "%UserName" /> </layout> </parameter> <parameter> <parameterName value= "@Category" /> <dbType value= "String" /> <size value= "50" /> <layout type= "HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils" > <conversionPattern value= "%Category" /> </layout> </parameter> <parameter> <parameterName value= "@URL" /> <dbType value= "String" /> <size value= "50" /> <layout type= "HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils" > <conversionPattern value= "%SysURL" /> </layout> </parameter> <parameter> <parameterName value= "@ClientIp" /> <dbType value= "String" /> <size value= "50" /> <layout type= "HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils" > <conversionPattern value= "%ClientIP" /> </layout> </parameter> </appender> |
说说里面几个主要的属性:
1)connectionType :数据连接类型,上面的是sql server;
2)connectionString :数据连接;
3)commandText :执行的命令;
4)parameter:指定各个参数的值;
看看运行的效果:
上面的配置中用到了部分扩展,在后面的文章中会进行说明。
总结
在这篇blog中详细说明了几种常用的Appender,还有其他许多Appender,如SmtpAppender、TraceAppender等等。在下篇blog中我会说下layout的使用。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?