关于log4j2 RollingRandomAccessFile记录日志问题
2017-11-01 14:03
2286 查看
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,具体大小需要自己设置。
以上全为我个人理解,如果各位大神觉得我理解有不对地方欢迎指正,共同进步。
<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,具体大小需要自己设置。
以上全为我个人理解,如果各位大神觉得我理解有不对地方欢迎指正,共同进步。
相关文章推荐
- 关于RandomAccessFile的问题
- RandomAccessFile 关于getFilePointer的问题
- BufferedRandomAccessFile--解决RandomAccessFile读取大文件时效率低的问题
- RandomAccessFile的乱码问题
- 关于“Windows cannot access the specified device, path, or file. You may not have the appropriate permissions to access the item.”问题的解决
- 编程问题记录:关于Tomcat配置https/SSL报“No Certificate file specified or invalid file format”的问题
- 黑马程序员----浅谈RandomAccessFile格式化数据问题和多个对象序列化存取的两个方法
- 关于RandomAccessFile一个坑!!!!
- 黑马程序员-学习日志-RandomAccessFile
- RandomAccessFile的编码转换问题
- RandomAccessFile乱码问题
- 使用RandomAccessFile 对日志文件读取,以及读取追加的文件内容。
- day21对象流。管道流。RandomAccessFile。DataStream。字节流。常见的编码表。编码解码。联通问题。
- randomaccessfile在移动设备多线程多服务器下载时写入慢的问题
- 关于PHP错误日志不记录的问题
- RandomAccessFile读取远程系统日志
- RandomAccessFile关于多线程的一些知识
- 关于RandomAccessFile
- RandomAccessFile读取远程系统日志
- 关于apache使用CustomLog 记录日志以及错乱的问题