关于log4j2 RollingRandomAccessFile记录日志问题
来源:互联网 发布:android精彩编程200例 编辑:程序博客网 时间:2024/05/18 06:20
maven引入的jar:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.6.2</version>
</dependency>
具体log4j2.xml如下:<?xmlversion="1.0"encoding="UTF-8"?>
<Configurationstatus="WARN"monitorInterval="600">
<!--配置日志文件所在目录 -->
<Properties>
<Propertyname="LOG_HOME">/home/wlsadmin/data/log4j2/ici/gateway</Property>
</Properties>
<Appenders>
<!--定义日志输出格式 -->
<Consolename="Console"target="SYSTEM_OUT">
<PatternLayoutpattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!-- 日志写入策略 immediateFlush 写入时立即刷新 日志文件-->
<RollingRandomAccessFilename="service_appender"immediateFlush="false"
fileName="${LOG_HOME}/ici-gateway-service.log"
filePattern="${LOG_HOME}/ici-gateway-service.%d{yyyy-MM-dd}.log.gz">
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
</PatternLayout>
<Policies>
<!-- 一般与 filePattern联用 以日志的命名精度来确定单位 这里我用yyyy-MM-dd来记录 所以1 表示是以天为周期存储文件 -->
<TimeBasedTriggeringPolicyinterval="1"modulate="true"/>
</Policies>
<!-- 表示日志文件.gz的压缩包最大保留数 -->
<DefaultRolloverStrategymax="15"/>
</RollingRandomAccessFile>
<RollingRandomAccessFilename="accessLogger_appender"immediateFlush="false"
fileName="${LOG_HOME}/ici-gateway-service-access.log"
filePattern="${LOG_HOME}/ici-gateway-service-access.%d{yyyy-MM-dd}.log.gz">
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M -- %msg%xEx%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicyinterval="1"/>
</Policies>
<DefaultRolloverStrategymax="15"/>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!--定义日志的输出级别 -->
<rootlevel="INFO">
<appender-refref="Console"/>
<appender-refref="service_appender"/>
</root>
<loggername="accessLog"level="debug"includeLocation="true"additivity="true">
<appender-refref="accessLogger_appender"/>
</logger>
</Loggers>
</Configuration>
启动web应用后发现输出的日志有很大一段时间不更新或者是日志文件一直是0Kb,由于需求的问题,我们需要调整日志及时输出,然后网上搜了很多大神让我把immediateFlush属性改为true,但是发现还是没有用。最后将RollingRandomAccessFile标签改成RollingFile问题解决了。然后我百度搜了RollingRandomAccessFile和RollingFile区别然后一直没有找到,最后一个外国大佬帖子上解释到(
RandomAccessFileAppender is always buffered, while FileAppender provides a config switch (bufferedIO). Both have an "immediateFlush" config option in case you want to be sure your messages are on disk (e.g. audit logging). Finally, the default buffer size for RandomAccessFileAppender is larger: 256*1024 bytes vs 8*1024 bytes for FileAppender (both appenders buffer size can be set in configuration).
)。大概意思是说log4j2的RollingRandomAccessFile 默认日志文件写入策略为异步刷盘,引出一个缓冲区(buffer)的概念,RollingRandomAccessFile 会将日志信息先写入到缓冲区,然后缓冲区满后刷到磁盘,并清空缓冲区,默认缓冲区的大小在8-256kb,具体大小需要自己设置。
以上全为我个人理解,如果各位大神觉得我理解有不对地方欢迎指正,共同进步。
- 关于log4j2 RollingRandomAccessFile记录日志问题
- SSM下log4j2 记录日志
- 如何配置log4j2日志记录至数据库
- Log4j2记录日志到数据库(MySQL&MongoDB)
- Log4j2记录日志到数据库(MySQL&MongoDB)
- Log4j2记录日志到数据库(MySQL&MongoDB)
- 关于实现log4j2日志脱敏的一种方案
- 关于日志记录系统
- 关于记录日志
- 关于apache使用CustomLog 记录日志以及错乱的问题
- log4j2配置mybatis日志
- log4j2 按天分日志
- Java日志-Log4J2
- log4j2 日志配置
- Log4j2实现异步日志
- LOG4J2 异步日志
- SpringBoot - 日志集成 Log4j2
- log4j2日志配置
- 获取二维数组中的元素(PHP 5.5新增函数),兼容低版本处理
- linux 下shell编程之for循环
- 测试开发-RESTful 架构详解
- 物理层的基本概念
- MyEclipse 8.5的优化,加快打开打开和编辑的速度
- 关于log4j2 RollingRandomAccessFile记录日志问题
- Redux中的bindActionCreators
- java基础-volatile关键字
- 17.1 内容协商技术
- 【Windows--Python3】Ping IP
- WinDbg学习笔记二
- Schwarz不等式 三角不等式
- Git branch
- java Collection容器(集合类)