Я хотів би дуже простий файл конфігурації XML з консоллю та додатком до файлу за допомогою log4j2.
(Веб-сайт Apache убиває мене багато інформації.)
Я хотів би дуже простий файл конфігурації XML з консоллю та додатком до файлу за допомогою log4j2.
(Веб-сайт Apache убиває мене багато інформації.)
Відповіді:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<File name="MyFile" fileName="all.log" immediateFlush="false" append="false">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
Примітки:
Logger logger = LogManager.getLogger();
для ініціалізації вашого реєстратораОсь мій спрощений текст, log4j2.xml
який друкує для консолі та записує у щоденний прокатний файл:
// java
private static final Logger LOGGER = LogManager.getLogger(MyClass.class);
// log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="logPath">target/cucumber-logs</Property>
<Property name="rollingFileName">cucumber</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%highlight{%-5level}] %d{DEFAULT} %c{1}.%M() - %msg%n%throwable{short.lineNumber}" />
</Console>
<RollingFile name="rollingFile" fileName="${logPath}/${rollingFileName}.log" filePattern="${logPath}/${rollingFileName}_%d{yyyy-MM-dd}.log">
<PatternLayout pattern="[%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 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="DEBUG" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="rollingFile" />
</Root>
</Loggers>
</Configuration>
TimeBaseTriggeringPolicy
інтервал (ціле число) - як часто відбувається перекидання на основі найбільш конкретної одиниці часу в шаблоні дати. Наприклад, з діаграмою дати, яка є найбільш конкретним елементом і збільшенням 4 перекидання, відбуватиметься кожні 4 години. Значення за замовчуванням - 1.
модуляція (булева) - вказує, чи слід відрегулювати інтервал, щоб викликати наступне перекидання на межі інтервалу. Наприклад, якщо елемент - години, поточна година - 3 години ранку, а інтервал - 4, то перший перехід відбудеться о 4 ранку, а наступний - о 8 ранку, полудні, 4 вечора тощо.
Джерело: https://logging.apache.org/log4j/2.x/manual/appenders.html
Вихід:
[INFO ] 2018-07-21 12:03:47,412 ScenarioHook.beforeScenario() - Browser=CHROME32_NOHEAD
[INFO ] 2018-07-21 12:03:48,623 ScenarioHook.beforeScenario() - Screen Resolution (WxH)=1366x768
[DEBUG] 2018-07-21 12:03:52,125 HomePageNavigationSteps.I_Am_At_The_Home_Page() - Base URL=http://simplydo.com/projector/
[DEBUG] 2018-07-21 12:03:52,700 NetIncomeProjectorSteps.I_Enter_My_Start_Balance() - Start Balance=348000
Новий файл журналу створюватиметься щодня з попереднім днем, автоматично перейменованим на:
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" (тобто використання атрибутів замість імен елементів), які можуть бути перевірені схемою.
Ось мій простий приклад використання автоконфігурації та суворого режиму, використовуючи "Властивість" для встановлення імені файлу:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorinterval="30" status="info" strict="true">
<Properties>
<Property name="filename">log/CelsiusConverter.log</Property>
</Properties>
<Appenders>
<Appender type="Console" name="Console">
<Layout type="PatternLayout" pattern="%d %p [%t] %m%n" />
</Appender>
<Appender type="Console" name="FLOW">
<Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n" />
</Appender>
<Appender type="File" name="File" fileName="${filename}">
<Layout type="PatternLayout" pattern="%d %p %C{1.} [%t] %m%n" />
</Appender>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="File" />
<AppenderRef ref="Console" />
<!-- Use FLOW to trace down exact method sending the msg -->
<!-- <AppenderRef ref="FLOW" /> -->
</Root>
</Loggers>
</Configuration>
File
тут політика? Який максимальний розмір файлу? І як це записати у файл? (чи завжди файл містить останні 10mb журналів?)