代码改变世界

Log4Net笔记(二)Apender

  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",
        URL="http://henllyee.cnblogs.com"
    });
     
}

我们来看看效果:

image

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>

看看效果:

image

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>

效果:

image

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&quot;.log&quot;"/>
    <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:日期的格式

我们看下运行的效果:

image

在上面的配置中文件的大小设置并不起作用,因为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:指定各个参数的值;

看看运行的效果:

image

上面的配置中用到了部分扩展,在后面的文章中会进行说明。

 

总结

在这篇blog中详细说明了几种常用的Appender,还有其他许多Appender,如SmtpAppender、TraceAppender等等。在下篇blog中我会说下layout的使用。

作者:Henllyee Cui
出处: http://henllyee.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示