Я установил немедленныйFlush = "false", так как это лучше для жизни SSD . Если вам нужен журнал прямо в вашем лог-файле, удалите параметр или установите его в true
Для полноты, рекомендуется использовать немедленное добавление = «ложь» при использовании Async Loggers или AsyncAppender.
Ремко Попма
1
Справочная информация: instantFlush = "false" позволяет асинхронным компонентам Log4J2 объединять несколько событий журнала за одну запись на диск. В качестве бонуса, ваши последние события журнала всегда записываются на диск и никогда не остаются в буфере памяти. (Что-то, что я нашел раздражающим в log4j-1.2.)
Ремко Попма
1
Я не мог заставить примеры на сайте Log4j 2.0 работать, но этот сделал. Спасибо.
Джангофан
12
Пожалуйста, добавьте тот факт, что для тех, кто использует затмение, может потребоваться чистка. Ради человечества.
Реут Шарабани
1
@ThorstenNiehues Я не могу редактировать свой предыдущий комментарий, но eclipse копирует конфигурацию при сборке, и по какой-то причине он не всегда копирует log4j.xml, даже если он изменился. По крайней мере, это то, что решило это для меня.
Реут Шарабани
19
Вот мой упрощенный способ log4j2.xmlпечати на консоль и записи в ежедневный файл:
// java
private static final Logger LOGGER = LogManager.getLogger(MyClass.class);
// log4j2.xml
<?xml version="1.0" encoding="UTF-8"?><Configurationstatus="WARN"><Properties><Propertyname="logPath">target/cucumber-logs</Property><Propertyname="rollingFileName">cucumber</Property></Properties><Appenders><Consolename="console"target="SYSTEM_OUT"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/></Console><RollingFilename="rollingFile"fileName="${logPath}/${rollingFileName}.log"filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log"><PatternLayoutpattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}"/><Policies><!-- Causes a rollover if the log file is older than the current JVM's start time --><OnStartupTriggeringPolicy/><!-- Causes a rollover once the date/time pattern no longer applies to the active file --><TimeBasedTriggeringPolicyinterval="1"modulate="true"/></Policies></RollingFile></Appenders><Loggers><Rootlevel="DEBUG"additivity="false"><AppenderRefref="console"/><AppenderRefref="rollingFile"/></Root></Loggers></Configuration>
TimeBasedTriggeringPolicy
интервал (целое число) - как часто должно происходить опрокидывание на основе наиболее определенной единицы времени в шаблоне даты. Например, с шаблоном даты с часами в качестве наиболее конкретного элемента и с приращением в 4 ролловера будет происходить каждые 4 часа. Значением по умолчанию является 1.
modulate (логическое значение) - указывает, следует ли корректировать интервал, чтобы следующий переход произошел на границе интервала. Например, если для элемента заданы часы, текущий час - 3 часа утра, а интервал - 4, тогда первый ролловер произойдет в 4 часа утра, а затем следующие произойдут в 8 часов утра, в полдень, в 4 часа дня и т. Д.
Лично я только недавно начал использовать log4j2, но я склоняюсь к конфигурации «строгого XML» (то есть с использованием атрибутов вместо имен элементов), которая может быть проверена схемой.
Вот мой простой пример, использующий автоконфигурацию и строгий режим, используя «Свойство» для установки имени файла:
<?xml version="1.0" encoding="UTF-8"?><Configurationmonitorinterval="30"status="info"strict="true"><Properties><Propertyname="filename">log/CelsiusConverter.log</Property></Properties><Appenders><Appendertype="Console"name="Console"><Layouttype="PatternLayout"pattern="%d %p [%t] %m%n"/></Appender><Appendertype="Console"name="FLOW"><Layouttype="PatternLayout"pattern="%C{1}.%M %m %ex%n"/></Appender><Appendertype="File"name="File"fileName="${filename}"><Layouttype="PatternLayout"pattern="%d %p %C{1.} [%t] %m%n"/></Appender></Appenders><Loggers><Rootlevel="debug"><AppenderRefref="File"/><AppenderRefref="Console"/><!-- Use FLOW to trace down exact method sending the msg --><!-- <AppenderRef ref="FLOW" /> --></Root></Loggers></Configuration>
Гибкая конфигурация удобна, когда вы пытаетесь отделить конфигурацию от сборки и поместить конфигурацию в хранилище в другом месте. К сожалению, сложности делают это немного раздражающим, но я подумал, что я бы выбрал преимущество гибких вариантов конфигурации.
adprocas
Какая Fileздесь политика? Каков максимальный размер файла? И как это записать в файл? (файл всегда содержит последние 10 МБ журналов?)
Ответы:
Ноты:
Logger logger = LogManager.getLogger();
для инициализации вашего регистратораисточник
Вот мой упрощенный способ
log4j2.xml
печати на консоль и записи в ежедневный файл:Вывод:
Новый файл журнала будет создаваться ежедневно, а предыдущий день автоматически переименовывается в:
cucumber_yyyy-MM-dd.log
В проекте Maven, вы бы поставить
log4j2.xml
в системуsrc/main/resources
илиsrc/test/resources
.источник
log4j2 имеет очень гибкую систему конфигурации (что, IMHO, больше отвлекает, чем помогает), вы даже можете использовать JSON. См. Https://logging.apache.org/log4j/2.x/manual/configuration.html для справки.
Лично я только недавно начал использовать log4j2, но я склоняюсь к конфигурации «строгого XML» (то есть с использованием атрибутов вместо имен элементов), которая может быть проверена схемой.
Вот мой простой пример, использующий автоконфигурацию и строгий режим, используя «Свойство» для установки имени файла:
источник
File
здесь политика? Каков максимальный размер файла? И как это записать в файл? (файл всегда содержит последние 10 МБ журналов?)