首页 > 其他分享 >log4net系列(三)--详解RollingFileAppender

log4net系列(三)--详解RollingFileAppender

时间:2023-10-20 17:00:28浏览次数:28  
标签:log4net 文件 27 -- RollingFileAppender 11 2015 日志

这篇讲讲实际产品中最常用到的appender -- RollingFileAppender。

前面讲过FileAppender,应该不难想到,如果一个系统的所有日志都记在一个日志文件里,那岂不是要撑爆了?所以我们真正使用的是RollingFileAppender,它基于时间生成一系列的日志文件,避免单个文件过大的问题。下面是一个经典的RollingFileAppender配置:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="D:\WebTest\" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="MaximumFileSize" value="10MB" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd'.txt'" />
<param name="RollingStyle" value="Composite" />
<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%M] - Line %L:%m%n" />
</layout>
</appender>

我们从需求的角度反向分析这些配置的细节。

1. 我们的日志要存到哪里?

<param name="File" value="D:\WebTest\" />为我们指定了路径。
2. 日志文件怎么命名?

<param name="DatePattern" value="yyyy-MM-dd'.txt'" />指定文件名的日期格式。如果要加个".txt"的后缀,需要用单引号把它包起来。用"也可以,即下面的写法是等价的:<param name="DatePattern" value="yyyy-MM-dd".txt"" />
<param name="StaticLogFileName" value="false" />指明文件名是变动的。这个设成true的话不能生成rolling的日志文件。
<param name="RollingStyle" value="Composite" />指明文件的命名方式。"Composite"指文件名同时按size和date来命名,一般就用这个。还有其他3个取值:Once(每次程序启动新生成一个)、Size、Date。当RollingStyle=Composite时,如果File参数设为"D:\WebTest\MyLog_" ,那么文件名将是:"MyLog_2015-11-27.txt"。
3. 怎么限定日志文件的大小?

<param name="MaximumFileSize" value="10MB" />限定每个日志文件不超过10M。
4. 日志超过指定大小后会怎样?

<param name="MaxSizeRollBackups" value="10" />表明,到达限制大小后会生成一个新文件,如"2015-11-27.txt.1",依此类推,当生成"2015-11-27.txt.10"之后,再满了就要回头覆盖第一个文件了。
5. 日志以什么方式写?

<param name="AppendToFile" value="true" />说明日志以增量方式写入。设成false就是覆盖模式了。
6. 日志内容的格式可以定义吗?

<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%M] - Line %L:%m%n" />
</layout>
layout标签中的ConversionPattern参数可以定义每条消息的格式,比如上面这个意思是:"时间 [线程id] 级别 类名 [方法名] - Line 行号:消息内容+换行符",

例子:2015-11-27 19:18:25,320 [89] ERROR ASP.default_aspx [Page_Load] - Line 9:Hello World!

layout的参数详解会单独用一章来讲。

7. 写日志会影响系统性能吗?

写日志必然是会消耗一定资源的,而RollingFileAppender也不是线程安全的。为了减小log4net影响系统性能的嫌疑,我们加入lockingModel参数,使用FileAppender.MinimalLock来减少并发时发生死锁的概率:

<param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
尽管如此,文件的I/O始终是耗性能的,有没有办法缓存一批日志,然后一次性写入文件呢?BufferingForwardingAppender正是为此而生,我们下章再介绍如何使用它。


————————————————
版权声明:本文为CSDN博主「等不到来世」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/szx1999/article/details/50073857

标签:log4net,文件,27,--,RollingFileAppender,11,2015,日志
From: https://www.cnblogs.com/chinasoft/p/17777507.html

相关文章

  • vue 各种东西的顺序
    props  —》beforeCreate —》methods—》data—》computed—》watch(immediate)—》created beforeCreate会在实例初始化完成、props解析之后、data() 和 computed 等选项处理之前立即调用。 created当这个钩子被调用时,以下内容已经设置完成:响应式数据data、......
  • 图片验证码识别网站【汇总】
    收集的一些识别图片字符的网站(可能要收费)图鉴网:http://www.ttshitu.com/超级鹰:https://www.chaojiying.com/参考、来源:《路飞-爬虫三天工作坊-Day2-苑老师-2023-09-26》03:59《Python3网络爬虫开发实战第2版》崔庆才P317......
  • python基础-数据类型(none、集合、字典、浮点数)
    目录1.了解hash2.None类型3.集合(set)3.1定义3.2独有功能3.3公共功能3.4转换3.5其他3.5.1集合的存储原理3.5.2元素必须可哈希3.5.3集合查找元素速度快3.5.4对比和嵌套集合练习题4.字典(dict)4.1定义4.2独有功能练习题4.3公共功能4.4转换4.5其他4.5.1存储原......
  • python基础-函数与模块1
    目录了解函数和模块1.文件操作1.1读文件1.2写文件1.3文件打开模式1.4常见功能读文件操作写文件操作1.5文件上下文管理练习题2.csv文件3.ini文件4.xml文件5.Excel文件5.1读Excel5.2写Excel6.压缩文件7.练习题了解函数和模块函数:一个用于专门实现某个功能的代码块,......
  • javascript 数组对象根据id去重的几种方法
    例如:想去除重复id为1的项arr=[{id:1,name:'张三',age:20},{id:1,name:'张三',age:20},{id:2,name:'李四',age:20},{id:3,name:'马五',age:20},];方法一通过forEach再通过some方法判断数组是否包含当前对象id,不包含则添加so......
  • OpenResty入门之压测篇:压测工具界的 “悍马” wrk 审核中
    在上篇文章每个后端都应该了解的OpenResty入门以及网关安全实战中,我向大家介绍了OpenResty的入门使用是WAF防御实战,这篇文章将给大家继续介绍OpenResty入门之性能测试篇。性能测试是软件开发中不可或缺的一环,它可以帮助我们评估系统的性能、稳定性、可扩展性等指标,为......
  • JMeter 使用 http长连接
    如果需要在JMeter通过http长连接发送请求,首先需要选择了UseKeepAlive长连接协议,虽然默认是勾选的,但也需要确认一下。除了选择了UseKeepAlive长连接协议,还需要在Advanceed高级选项面板,选择HttpClient4类型的HttpRequest请求实现。在即使选择了UseKeepAlive长连......
  • python基础-函数与模块2
    目录1.初识函数2.函数的参数2.1参数2.2默认参数2.3动态参数3.函数的返回值4.练习题1.初识函数面向过程编程:按照业务逻辑从上到下逐步完成函数式编程:利用函数编程函数,是一堆功能代码的集合def函数名():函数内编写代码......函数名()definfo(......
  • python基础-面向对象3
    目录1.继承补充1.1mro和c3算法1.2py2和py3继承区别2.内置函数补充3.异常处理3.1异常细分3.2自定义异常和抛出异常3.3finally和else3.3.1特殊的finally3.3.2else3.3.3traceback3.4异常练习题4.反射4.1一切皆对象4.2import_module+反射5.练习题1.继承补充......
  • python基础-面向对象2
    目录1.成员1.1变量1.2方法1.3属性2.成员修饰符3.对象嵌套4.特殊方法5.练习题1.成员面向对象中的所有成员如下:变量实例变量类变量方法绑定方法类方法静态方法属性1.1变量实例变量,属于对象,每个对象中各自维护自己的数据类变量,属于类,可以被所有对象......