Максимальный размер файла журнала в log4j 1.2.17 со свойствами - PullRequest
0 голосов
/ 07 декабря 2018

Я настраиваю регистраторы на наших серверах для ежедневной архивации журналов.Мне также нужно убедиться, что отдельные файлы журнала не становятся слишком большими (скажем, 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 той же версии.

При тестировании регистрациисоздает произвольные большие файлы.Я пробовал MaximumFileSize и MaxFileSize вместо maxFileSize, «10MB» вместо числа, но ничего не получалось.

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

Но это тоже не сработало.Оказывается, в моем экземпляре 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

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

1 Ответ

0 голосов
/ 01 января 2019

@ GregT Как вы знаете, log4j имеет три основных конструкции - Appenders, приоритет (logger) и макет шаблона.По умолчанию корневой Logger устанавливается, когда мы создаем экземпляр 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, в экземпляре «log».

Обратите внимание, что мы могли бы также установить разные журналы для разных модулей

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>

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

...