Максимальный размер файла журнала в log4j 1.2.17 со свойствами

Я настраиваю регистраторы на наших серверах для ежедневного архивирования журналов. Мне также нужно убедиться, что отдельные файлы журналов не становятся слишком большими (скажем, 10 МБ на файл).

Ни один из них еще не работал, но сначала я хотел бы решить проблему размера файла.

Вот мой файл 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 той же версии.

Когда я тестирую ведение журнала, он создает произвольно большие файлы. Я попробовал maxFileSize и MaxFileSize вместо maxFileSize, «10 МБ» вместо числа, но ничего не получилось.

Я также попытался установить свойство программно, хотя это усложнило бы задачу, поскольку у нас есть много классов, использующих регистратор.

Но это тоже не сработало. Оказывается, в моем экземпляре Logger нет приложений (?). Вот мой код:

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);
}

Результатом является нулевое перечисление:

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

Я не нашел другой пост, который был бы полезен для моей проблемы. Есть идеи?


person GregT    schedule 07.12.2018    source источник


Ответы (1)


@GregT Как вы знаете, log4j имеет три основные конструкции: Appenders, приоритет (регистратор) и макет шаблона. По умолчанию корневой регистратор устанавливается, когда мы создаем экземпляр log4j, такой как Logger log = Logger.getInstance(Somclass.class) ->, он добавляет аддитивность корневого регистратора (означает, что приоритет и уровень, установленные в корневом регистраторе, по умолчанию наследуются этим дочерним регистратором). Теперь вы можете определить свой собственный приоритет и уровень в конфигурации 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, он просто распечатает операторы, соответствующие уровню 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>

Надеюсь, что это ответ на ваш вопрос.

person vijayakumarpsg587    schedule 01.01.2019
comment
Как это должно помочь с SizeBasedTriggeringPolicy или TimeBasedRollingPolicy? - person GregT; 18.01.2019
comment
@GregT Я обновил ответ. Извиняюсь, так как я неправильно истолковал вопрос в первую очередь. - person vijayakumarpsg587; 20.01.2019
comment
Это действительно интересно, если это работает только с XML, и довольно неожиданно. В конце концов, мы перешли на log4j 2 с конфигурационным файлом XML, и он выполнил свою работу. Я попытался записать XML обратно в файл свойств, но безуспешно (нет вывода журнала). Может быть, даже log4j2 не может обрабатывать эти политики в файле свойств? - person GregT; 21.01.2019
comment
К сожалению, этот файл конфигурации XML также не работал, log4j:WARN Не удалось найти приложения для регистратора ... Пожалуйста, правильно инициализируйте систему log4j. Я указываю местоположение файла конфигурации явно. Я попытался добавить отсутствующие теги ‹Configuration› и ‹/Configuration›, но не помогло. Думаю, сейчас это не так важно. В любом случае, спасибо! - person GregT; 21.01.2019
comment
нет проблем @GregT. Я попытаюсь воспроизвести это, так как в настоящее время он работает нормально для меня, я опубликую его, как только получу решение. - person vijayakumarpsg587; 22.01.2019