Log4j2 中三种常见 File 类 Appender 对比与选择

news/2025/3/1 15:11:00/文章来源:https://www.cnblogs.com/77cxw/p/18744884
在 Log4j2 中,有三种常见的 File 类 Appender,分别是 FileAppenderRollingFileAppender 和 AsyncFileAppender,下面为你详细介绍它们的特点、对比及选择建议。

1. FileAppender


特点


  • 基本功能:FileAppender 是最基础的文件追加器,它会将日志信息直接写入指定的文件中。日志文件会持续增长,直到达到文件系统的限制或者手动进行处理。
  • 配置简单:只需要指定日志文件的路径和基本的日志格式,就能快速开始使用。
  • 同步操作:日志写入操作是同步的,这意味着在日志写入完成之前,应用程序的线程会被阻塞,可能会影响应用程序的性能。

示例配置


收起
xml
 
<Appenders><File name="FileAppender" fileName="logs/app.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/></File>
</Appenders>

2. RollingFileAppender


特点


  • 日志滚动:RollingFileAppender 支持日志滚动功能,当日志文件达到一定的大小或者满足特定的时间条件时,会自动创建新的日志文件,并将旧的日志文件进行归档。
  • 多种滚动策略:可以根据文件大小、时间(如每天、每小时)等条件法律进行滚动,还可以设置保留的历史日志文件数量,便于日志管理和维护。
  • 性能较好:通过合理配置滚动策略,可以避免单个日志文件过大,提高日志文件的读写性能。

示例配置


收起
xml
 
<Appenders><RollingFile name="RollingFileAppender" fileName="logs/app.log" filePattern="logs/app.%d{yyyy-MM-dd}.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>https://www.hefeilaws.com/<Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="10 MB"/></Policies><DefaultRolloverStrategy max="10"/></RollingFile>
</Appenders>

3. AsyncFileAppender


特点


  • 异步写入:AsyncFileAppender 采用异步方式将日志写入文件,不会阻塞应用程序的线程,从而提高应用程序的性能。当有日志需要记录时,会将日志信息放入一个队列中,由专门的线程负责从队列中取出日志并写入文件。
  • 提高吞吐量:在高并发场景下,异步写入可以显著提高日志记录的吞吐量,减少应用程序因日志写入而产生的性能瓶颈。
  • 可能存在数据丢失风险:如果应用程序突然崩溃,队列中尚未写入文件的日志信息可能会丢失。可以通过配置一些参数来降低这种风险,如设置队列大小和阻塞策略。

示例配置


收起
xml
 
<Appenders><Async name="AsyncFileAppender"><AppenderRef ref="FileAppender"/></Async>
</Appenders>
 
 
 
 
 
 
 
 
 
 
 
 

对比与选择建议


Appender 类型写入方式日志管理性能适用场景
FileAppender 同步 无滚动,日志文件持续增长 低,同步写入可能阻塞线程 日志量小、对性能要求不高的简单应用
RollingFileAppender 同步 支持日志滚动,便于管理历史日志 中,避免单个文件过大 日志量较大,需要定期归档和清理日志的应用
AsyncFileAppender 异步 依赖于内部引用的 Appender(如 FileAppender 或 RollingFileAppender 高,异步写入提高吞吐量 高并发场景,对性能要求较高的应用

在实际应用中,可以根据具体的需求和场景选择合适的 File 类 Appender,也可以将不同的 Appender 组合使用,以达到最佳的日志记录效果。例如,在高并发场景下,可以使用 AsyncFileAppender 结合 RollingFileAppender,既保证了性能,又方便了日志管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/891560.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何保证 Redis 缓存和数据库的一致性?

如何保证 Redis 缓存和数据库的一致性? 1. 问题出现场景先修改数据库,再删除缓存 删除数据库数据成功了,但是删除缓存却失败了,缓存中仍保留的是旧数据先删除缓存,再删除数据库 如果 Redis 缓存删除成功后,假如数据库数据还没来得及更新,用户又请求数据,这时就会从数据…

PowerShell开发小工具 四张照片拼成一张

小工具的设计与实现------选四张照片拼成一张照片。 很经典的应用情景,市面上有很多类似的小软件,特别是手机应用。为了方便学习巩固PowerShell,今天笔者使用它来实现。【设计思路】选择四张符合要求的照片或图片[.jpg] [.png] 准备画布,计算其子区域(画布四分之一)宽高比…

Python123画一个五星红旗

点击查看代码 import turtle import math# 初始化画布(推荐设置600x400显示区域) screen = turtle.Screen() screen.colormode(1.0) t = turtle.Turtle() t.speed(10) t.hideturtle()# 国旗标准参数 FLAG_WIDTH = 600 # 旗面宽度 FLAG_HEIGHT = 400 # 严格3:2比例…

擦除0地址codeflash营造空片现象_重新上电即可进入BootLoader程序

芯片在空片时,首次插入USB供电会直接在ISP工具中搜索到USB设备,可以进行首次烧录;原因是在0地址没有用户程序,所以会在停留在boot区域; 利用该特性,可以在固件中加入一些处理,比如USB OUT端点透传数据给芯片,解析成功后,使用FLASH_ROM_ERASE接口擦除0地址数据,此后给…

探秘Transformer之(8)--- 位置编码

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer之(8)--- 位置编码 目录探秘Transformer之(8)--- 位置编码0x00 概述0x01…

day11 用户的管理篇

day11用户的管理篇不同的用户,在不同的目录下,操作不同的文件权限是不一样的用户的路的机器该文件和用户的关系是什么在单位里运维作为服务器的管理员,root权限是有的 而开发,测试,他们是不可能有root权限的 即使需要使用root权限,运维会给他配置(临时使用管理员身份运行…

idea无法跳转到jar包里面的代码

需要添加到library 右键点击jar包,然后添加到library

【vulhub】tomcat CVE-2017-12615(任意写入文件)

CVE-2017-12615 tomcat 任意写入文件 漏洞复现渗透环境 攻击机: 192.168.66.130(Kali) 漏洞收录于:vulhub/tomcat/CVE-2017-12615 涉及知识点:tomcat任意文件写入 漏洞详情 当 Tomcat 运行在 Windows 系统且启用了 HTTP PUT 方法(通过将 readonly 参数设置为 false)时…

太阳花2

from turtle import * color(red,yellow) begin_fill() while True:forward(200)left(170)if abs(pos()) < 1:breakend_fill()done()

reDuh工具:实现端口复用(附下载链接)

本文来自无问社区成员,村口一枝花投稿。 一、端口复用的知识点 有关端口复用的知识点,深入学习一下。存在的安全隐患所指的是在同一个端口上建立了与多个服务之间的连接,在实际场景下多用于绕过防火墙的端口限制。 二、场景设立实验环境 靶机 B 在内网当中,而防火墙只开放了…

【Java免杀】异或加密 (XOR Cipher)实现WebShell免杀

异或加密是一种对每个字符执行位操作的加密方法。通过与一个密钥进行异或运算,明文会被加密,且加密后的文本可以通过相同的密钥再次进行异或解密。 一、加密与解密示例: <%! public static String xorEncryptDecrypt(String text, char key) {StringBuilder result = new…

大厂开源项目,真的太爽啦,字节跳动出品!这个设计系统开源神器,让你的产品颜值与效率齐飞

Semi Design是由抖音前端团队开源的企业级设计系统,**同时支持React/Vue双框架**,提供超过60+高质量组件。不同于普通UI库,它从**设计工程化**角度出发,打通Figma设计资源与前端代码的桥梁,真正实现设计稿到代码的"零误差还原"。目前已在字节跳动200+项目中验证…