我正在尝试从log4j1更改为log4j2。我做了什么:
环境: 狂野10 1 EAR 4战争 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有外观吗?这些是我所做的改变(我试图从一个我在网上找到的简单配置文件开始)。该文件甚至没有创建,但控制台日志工作正常。
谢谢,
答案 0 :(得分:1)
我使用下面的配置在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的部署-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文件中的依赖项。您可以从所有WAR文件中删除jboss-deployment-structure.xml
文件。
jboss-deployment-structure.xml
文件现在位于src/main/application/META-INF/
下的EAR文件中,并包含:
<?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
文件配置为根据包名称打印到不同的文件。在question
答案 1 :(得分:0)
在jboss-deployment-structure.xml中排除日志子系统可能会更好。我本来会以此为注释,但是粘贴xml并不是很漂亮。
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="logging" />
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>