我正在尝试从 log4j1 更改为 log4j2。我做了什么:
环境: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 中有:
log4j-api
,log4j-core
,log4j-slf4j-impl
如依赖pom.xml
。log4j2.xml
下src/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] 删除。
我来说两句