使用 log4j2 进行日志记录

里卡多

我正在尝试从 log4j1 更改为 log4j2。我做了什么:

  • 删除旧的配置文件 log4j.xml
  • 创建了新的配置文件 log4j2.xml
  • 创建 jboss-deployment-structure.xml
  • 编辑的pom

环境:Wildfly 10 1 EAR 4 WAR 文件中未使用 web.xml。以前的 log4j 配置日志在 EAR 中(仅)

Log4j2 配置文件

 <?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>

Jboss 部署结构

    <?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <!--Use log4j.xml file instaead of using the loggin subsystem configuration -->
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

新的 Maven 依赖项

 <!-- Apache Log4j API -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.2</version>
        </dependency>

        <!-- Apache Log4j SLF4J Binding -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.8.2</version>
        </dependency>

        <!-- Apache Log4j Core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>

        </dependency>

我之前说过我使用 log4j1 和 SLF4j 有外观。这些是我所做的更改(我试图从我在网上找到的一个简单的配置文件开始)。该文件甚至没有创建,但控制台日志工作正常。

谢谢,

团队

我使用以下配置使其与 JBoss 7.1.1 中的 webapp 一起使用。

/src/main/resources/log4j2.xml

... above unchanged ...
<File name="MyFile" fileName="/Users/tima/Desktop/all.log" immediateFlush="true" append="true">
... below unchanged ...

WEB-INF/jboss-deployment-structure.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

pom 文件和你的一样。

测试控制器

@Controller
@RequestMapping("/test1")
public class HelloWorldController {

    private static final Logger logger = LogManager.getLogger(HelloWorldController.class);

    @RequestMapping(method = RequestMethod.GET)
    public ResponseEntity<Map<String, Object>> printHello() {
        logger.info("entered printHello()");
        System.out.println("entered printHello() 2");

        Map<String, Object> resultMap = new HashMap<String, Object>();

        return new ResponseEntity<>(resultMap, HttpStatus.OK);
    }
}

结果

$: cat ~/Desktop/all.log
2017-05-11 15:13:35.918 [http--0.0.0.0-8080-2] INFO  com.tima.controller.HelloWorldController - entered printHello()

同样在 server.log 中,我可以看到以下内容:

15:13:35,937 INFO  [stdout] (http--0.0.0.0-8080-2) entered printHello() 2

编辑

如果要使用org.slf4j.Logger记录器,则必须将以下行添加到jboss-deployment-structure.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
    <deployment>
        <exclusions>
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

编辑 2

如果您使用的是 EAR 文件,则可以使用在 EAR 文件中的其他模块/WAR 之间共享的公共 JAR 来设置日志记录。

在常见的 JAR 中有:

  1. log4j-apilog4j-corelog4j-slf4j-impl如依赖pom.xml
  2. log4j2.xmlsrc/main/resources

将公共 jar 作为 WAR 文件中的依赖项。您可以jboss-deployment-structure.xml从所有 WAR 文件中删除该文件。

jboss-deployment-structure.xml文件现在将位于 EAR 文件中src/main/application/META-INF/,并包含:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
    <sub-deployment name="war-1.war">
        <exclusions>
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
        </exclusions>
    </sub-deployment>
    <sub-deployment name="war-2.war">
        <exclusions>
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
        </exclusions>
    </sub-deployment>
    ...other wars here...
</jboss-deployment-structure>

上述配置将从所有 WAR 文件打印到同一个文件。但是您可以将log4j2.xml文件配置为根据包名打印到不同的文件。在这个问题中解释了这种方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章