具有属性的log4j 1.2.17中的最大日志文件大小

时间:2018-12-07 11:17:49

标签: log4j rollingfileappender

我正在将服务器上的记录器配置为每天压缩日志。我还需要确保单个日志文件不会太大(例如每个文件10MB)。

两者都没有,但是首先我想解决文件大小的问题。

这是我的log4j.properties文件:

log4j.rootLogger=DEBUG, file

log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.file.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.rollingPolicy.fileNamePattern=./log/logging.%d.log.zip
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.file.TriggeringPolicy.maxFileSize=1000000
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 1.2.17,现在我添加了相同版本的log4j Extras。

当我测试日志记录时,它将创建任意大文件。我尝试用maxFileFileSize和MaxFileSize代替maxFileSize,用“ 10MB”代替数字,但是没有用。

我也尝试通过编程方式设置属性,尽管这会使事情变得困难,因为我们有许多使用记录器的类。

但是这也不起作用。事实证明,我的Logger实例(?)中没有Appender。这是我的代码:

logger = Logger.getLogger(LogTest.class);
//        RollingFileAppender app = (RollingFileAppender) logger.getAppender("file");
//        app.setMaxFileSize("1000000");
Enumeration allAppenders = logger.getAllAppenders();
System.out.println(allAppenders);
for (Enumeration<Object> iter = allAppenders; iter.hasMoreElements();) {
    Object elem = iter.nextElement();
    System.out.println(elem);
}

输出为空Enumeration:

org.apache.log4j.helpers.NullEnumeration@1161fded

我没有找到其他对我的问题有用的帖子。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

@GregT 如您所知,log4j具有三个主要结构-Appender,优先级(记录器)和模式布局。默认情况下,当我们实例化log4j(例如Logger log = Logger.getInstance(Somclass.class)->时,会设置root Logger,它会增加rootlogger的可加性(意味着默认情况下,此子logger继承rootlogger中设置的优先级和级别)。现在,您可以选择在lo4j配置中定义自己的优先级和级别(在xml或属性文件中)。

这是我为此配置的内容。消除了触发策略和动态命名,这是使用.properties文件的示例配置

log4j.threshold = INFO
#Specify the appender and the priority
log4j.rootLogger = DEBUG, Appender1, Appender2

log4j.appender.Appender1 = org.apache.log4j.ConsoleAppender

log4j.appender.Appender2 = org.apache.log4j.RollingFileAppender
log4j.appender.Appender2.File = app/log1.log

log4j.appender.Appender1.layout = org.apache.log4j.PatternLayout
log4j.appender.Appender2.layout = org.apache.log4j.PatternLayout

# Print the date in ISO 8601 format
log4j.appender.Appender1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.Appender2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

注意:在这里,如果将阈值设置为INFO,即使将优先级设置为DEBUG级别,它也只会在“ log”实例中打印出符合INFO级别的语句。

请注意,我们还可以为不同的模块设置不同的日志记录

log4j.rootLogger=DEBUG

# AdminFileAppender - used to log messages in the admin.log file.
log4j.appender.AdminFileAppender=org.apache.log4j.FileAppender
log4j.appender.AdminFileAppender.File=app/admin.log
log4j.appender.AdminFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.AdminFileAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# ReportFileAppender - used to log messages in the report.log file.
log4j.appender.ReportFileAppender=org.apache.log4j.FileAppender
log4j.appender.ReportFileAppender.File=app/report.log
log4j.appender.ReportFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ReportFileAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

**log4j.logger.com.vaannila.admin=,AdminFileAppender 
log4j.logger.com.vaannila.report=,ReportFileAppender** 

如果达到配置的阈值大小时要推出新文件,则可以使用RollingFileAppender。这里,管理模块日志写入“ admin.log ”文件,报告模块写入“ report.log ”文件

希望这会有所帮助

编辑:我担心基于时间/基于大小的触发策略会很好地工作,并且仅适用于xml配置而不是属性文件配置。请检查一下。而且您也不必包括apache-log4j-extras依赖项。随附了1.2.17。这是我使用的基于XML的配置

 <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <RollingFile name="info" filepattern="apps/logs/${hostName}-info-%i.log"
            filename="apps/logs/${hostName}-info.log">

            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %X{userName} [%C] %F:%L - %m%n" />
            <Policies>

                <SizeBasedTriggeringPolicy size="20 MB" />

            </Policies>

            <DefaultRolloverStrategy max="1" min="1" />

        </RollingFile>
        <RollingFile name="debug" filepattern="apps/logs/${hostName}-debug-%i.log"
            filename="apps/logs/${hostName}-debug.log">

            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %X{userName} [%C] %F:%L - %m%n" />
            <Policies>

                <SizeBasedTriggeringPolicy size="20 MB" />

            </Policies>

            <DefaultRolloverStrategy max="1" min="1" />

        </RollingFile>
        <Routing name="RoutingAppender">
            <Routes pattern="${ctx:logFileName}">
                <Route>
                    <RollingFile name="${ctx:logFileName}-logfile"
                        fileName="apps/logs/${hostName}-${ctx:logFileName}.log"
                        filePattern="apps/logs/${hostName}-${ctx:logFileName}-%i.log">
                        <PatternLayout>
                            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}[%X{logTrackingId}] [%t] %c{1} - %msg%n
                            </pattern>
                        </PatternLayout>
                        <Policies>
                            <SizeBasedTriggeringPolicy size="20 MB" />
                        </Policies>
                        <DefaultRolloverStrategy max="1" min="1" />
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>

        <RollingFile name="RollingFileMonitor" filepattern="apps/logs/${hostName}-monitor-%i.log"
            filename="apps/logs/${hostName}-monitor.log">

            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %X{userName} [%C] %F:%L - %m%n" />
            <Policies>
                <SizeBasedTriggeringPolicy size="20 MB" />
            </Policies>

        </RollingFile>

        <RollingFile name="RollingFileAPM" filename="apps/logs/${hostName}-apm.log"
            filepattern="apps/logs/${hostName}-apm-%i.log">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %X{userName} [%C] %F:%L - %m%n" />
            <Policies>
                <SizeBasedTriggeringPolicy size="20 MB" />
            </Policies>
            <DefaultRolloverStrategy min="1" max="1" />
        </RollingFile>
    </Appenders>


    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
        <Logger name="com.XXXX.app.service" additivity="false">
            <AppenderRef ref="RollingFileMonitor" />
        </Logger>
        <Logger name="com.XXXX.apm" additivity="false">
            <AppenderRef ref="RollingFileAPM" />
        </Logger>

        <Logger name="com.XXXX,config" level="info" additivity="false">
            <AppenderRef ref="info" />
        </Logger>

        <Logger name="com.XXXXXX.controller" level="info" additivity="false">
            <AppenderRef ref="RoutingAppender" />
        </Logger>
        <Logger name="com.XXXXX.impl" level="info" additivity="false">
            <AppenderRef ref="RoutingAppender" />
        </Logger>
        <Logger name="com.XXXXX.impl" level="info" additivity="false">
            <AppenderRef ref="RoutingAppender" />
        </Logger>
        <Logger name="com.XXXX.logging" level="info" additivity="false">
            <AppenderRef ref="RoutingAppender" />
        </Logger>
        <Logger name="com.zaxxer.hikari" level="debug" additivity="false">
            <AppenderRef ref="debug" />
        </Logger>
    </Loggers>

希望这可以回答您的问题。