如何通过log4j控制每日滚动和最大文件大小的日志文件? [英] How to control log file with daily rolling and max file size by log4j?

查看:186
本文介绍了如何通过log4j控制每日滚动和最大文件大小的日志文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个可以在第二天开始时滚动的日志文件,或者如果达到指定的文件大小并且日志文件必须包含在date文件夹中,则可以滚动该日志文件. 文件夹格式为YYYYMMDD(/20111103/mylogfile.log)

I would like to create log file that can be rolled at the beginning of the next day or if it's reached to specified file size and log file must be contained inside date folder. Format of folder is YYYYMMDD (/20111103/mylogfile.log)

是否可以通过Log4j做到这一点而无需实现自定义类?

Is it possible to do this by Log4j without implementing custom class?

现在我正在使用log4j和log4j-extra, 我将Log4j API中定义的FileNamePattern属性设置为每天滚动文件 并将最大文件大小设置为50 MB.

Now I am using log4j and log4j-extra, I set FileNamePattern attribute as defined in log4j API to rolling my file everyday and set max file size to 50 MB.

我的log4j.xml是:

<appender name="MYAPPENDER" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="encoding" value="UTF-8" />
    <param name="append" value="true" />
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" value="${catalina.home}/logs/MY-APP/%d{yyyyMMdd}/MY-APP_%d{yyyyMMddHHmmss}.log" />
    </rollingPolicy>
    <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
        <param name="maxFileSize" value="50000000" />
    </triggeringPolicy>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[%d{dd/MM/yyyy HH\:mm\:ss}] %-5p [%c.%M(),%4L] - %m%n" />
    </layout>
</appender>

上述设置的结果是,日志文件不会在第二天开始时滚动,但是如果文件大小达到50 MB,则会滚动日志文件.

Result of above setting is that log file is not rolled at the beginning of next days but if file's size reached to 50 MB, log file will be rolled.

请帮助我. m(_ _m)

Please help to advise me. m(_ _)m

推荐答案

日常使用有问题的xml为我工作,仅转换为log4j.properties,等效于100KB后翻转(用于测试):

Daily works for me with xml in question only transformed into log4j.properties equivalent to roll over after 100KB (for testing purposes):

# Root logger option
log4j.rootLogger=INFO, file

# Direct log messages to a file
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.RollingPolicy.FileNamePattern=/path/to/logs/%d{yyyyMMdd}/myLog_%d{yyyyMMddHH}.log
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.file.TriggeringPolicy.maxFileSize=100000
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file.Append=true

这将创建带有时间戳的目录(每天一个目录-可选),其日志格式如下(每小时一个,用于测试-更改FileNamePattern以满足您的需要):

This will create a timestamped directory (one directory per day - optional) with logs with the following format (one per hour for testing purposes - change FileNamePattern to suit your needs):

myCompanyLog_20160203 10 30.log

myCompanyLog_201602031030.log

myCompanyLog_20160203 11 30.log

myCompanyLog_201602031130.log

这篇关于如何通过log4j控制每日滚动和最大文件大小的日志文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆