Как открыть логи log4j2 с помощью Apache Chainsaw

Я с трудом открываю логи с помощью Apache Chainsaw v2. Я не смог успешно открыть свои журналы с помощью zeroconf, ни с xmllayout по умолчанию. Это работает как очарование для меня в.net. Но на Яве это кошмар.

Основной класс:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public class Start {

    public static Logger logger = LogManager.getLogger(Start.class);

    public static void main(String[]args){
        logger.info("Example log info");
        logger.trace("Example log trace");
        logger.debug("Example log debug");
        logger.error("Example log error");
        logger.fatal("Example log fatal");
        logger.warn("Example log warn");
        return;
    }
}

Конфигурация Log4j2

    <?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ALL" advertiser="multicastdns">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="custom layout %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <File name="log4j2Chainsaw" fileName="output.log" bufferedIO="false" advertiseURI="file:///C:/Users/gswiec/IdeaProjects/Log4j2ChainsawExample/output.log" advertise="true">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
        <File name="xmlLayoutForChainsaw" fileName="output.xml" bufferedIO="false" >
           <XmlLayout/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="trace">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="log4j2Chainsaw"/>
            <AppenderRef ref="xmlLayoutForChainsaw"/>
        </Root>
    </Loggers>
</Configuration>

Вот пом, все необходимые зависимости, кажется, там.

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>swiec.eu</groupId>
    <artifactId>Log4j2ChainsawExample</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--Log4j2 and apache chainsaw zeroconf dependencies-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>javax.jmdns</groupId>
            <artifactId>jmdns</artifactId>
            <version>3.4.1</version>
        </dependency>

        <!--XmlLayout dependencies-->
        <dependency>
            <groupId>com.fasterxml.woodstox</groupId>
            <artifactId>woodstox-core</artifactId>
            <version>5.0.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>

</project>

Весь пример проекта доступен по адресу https://github.com/swiec/eu.swiec.log4j2apacheexample

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

1 ответ

Решение

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

Я только что добавил это в ваш файл Start.java:

import java.util.Scanner;
...
    public static void main(String[]args){
        Scanner in = new Scanner(System.in);
        int i = in.nextInt();

Я также обновил вашу конфигурацию log4j - вам нужно использовать%m, а не%msg для PatternLayout, используемого для генерации output.log

        <File name="log4j2chainsawappender" fileName="output.log" bufferedIO="false" advertiseURI="file://Users/scott/eu.swiec.log4j2apacheexample/output.log" advertise="true">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %m"/>

Затем я запустил Chainsaw v2 (самая последняя версия в git) и запустил ваше приложение.

Как только ваше приложение было запущено, я выбрал Chainsaw 'connect to, log4j2chainsawappender', и появилась новая вкладка, в которой правильно отформатировали события журнала, проанализировав 'Start' в качестве регистратора, исправив уровни серьезности и т. Д.

Другие вопросы по тегам