log4j2 与 XMLLayout 如何?

标签 log4j2 xml-layout

网络上有关带有 XMLLayout 的 log4j2 的信息非常少。

我没有找到任何带有简单示例的链接(log4j2 + XMLLayout);

有人可以发布一个相同的简单示例......

关于 卡蒂克

最佳答案

这是一个最小的示例应用程序,演示了 XmlLayout 的使用。

pom.xml

<?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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>test-log4j2</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>Test Log4J 2</name>
    <description>Test Log4J 2</description>
    <properties>
        <jackson.version>2.5.0</jackson.version>
        <log4j.version>2.5</log4j.version>
    </properties>
    <build>
        <plugins>            
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <mainClass>Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>${project.artifactId}</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    </dependencies>
</project>

src/main/java/Main.java

import org.apache.logging.log4j.LogManager;

public class Main {
    public static void main(String[] args) {
        LogManager.getLogger(Main.class).info("This is a test.");
    }
}

src/main/resources/log4j2.properties

status = ERROR
name = PropertiesConfig

rootLogger.level = INFO
rootLogger.appenderRefs = CONSOLE
rootLogger.appenderRef.CONSOLE.ref = CONSOLE

appenders = CONSOLE

appender.CONSOLE.type = Console
appender.CONSOLE.name = CONSOLE
appender.CONSOLE.layout.type = XmlLayout
appender.CONSOLE.layout.complete = true
appender.CONSOLE.layout.compact = true

演示

> mvn clean package

> java -jar target/test-log4j2.jar
<?xml version="1.0" encoding="UTF-8"?><Events xmlns="http://logging.apache.org/log4j/2.0/events"><Event xmlns="" xmlns="http://logging.apache.org/log4j/2.0/events" timeMillis="1451539702378" thread="main" level="INFO" loggerName="Main" endOfBatch="false" loggerFqcn="org.apache.logging.log4j.spi.AbstractLogger"><Message>This is a test.</Message></Event></Events>

最棘手的部分是弄清楚所需的 Jackson 依赖关系。否则,Log4J 2 会遇到内部 ClassNotFoundException 错误,并且无法初始化 XmlLayout

如果您更喜欢基于 XML 的配置,那么这里是等效的 XML 配置。

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" name="XMLConfig">
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="CONSOLE"/>
        </Root>
    </Loggers>
    <Appenders>
        <Console name="CONSOLE">
            <XMLLayout complete="true" compact="true"/>
        </Console>
    </Appenders>
</Configuration>

关于log4j2 与 XMLLayout 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34540987/

相关文章:

java - 如何继承log4j配置xml?

java - log4j2不登录子进程

java - 我如何在 weblogic 中使用 log4j2?

android - 垂直布局,2 个元素,让顶部的元素填充剩余空间(底部的元素有 wrap_content)

android - 形状可绘制尺寸不起作用

java - Log4j2 登录到用户主文件夹

java - 为什么 Log4j2 Appender 不将下一行中的第一个日志添加到 header ?

android - 形状为背景,边框很小

安卓警告 : Grows due to localized text expansion

android - 如何在 nestedScrollView 中使用 viewpager 并在 viewpager 的顶部查看