[英]How to use log4j2 on tomcat9
我正在使用 log4j2 将日志打印到文件中。 当我在自己的电脑上使用它时它可以工作,但是当我在 tomcat 上部署 war 时,它没有工作。 我在这上面浪费了一整天。
我的 tomcat 版本:
Server version: Apache Tomcat/9.0.62
Server built: Mar 31 2022 14:34:15 UTC
Server number: 9.0.62.0
OS Name: Linux
OS Version: 4.15.0-161-generic
Architecture: amd64
JVM Version: 17.0.2+8-Ubuntu-118.04
JVM Vendor: Private Build
我的 log4j2.xml:
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config" strict="true" status="ERROR" name="ConfigTest">
<Properties>
<Property name="FILE_NAME">./src/logs/myLog.log</Property>
</Properties>
<Appenders>
<!-- log to file-->
<Appender type="File" name="File" fileName="${FILE_NAME}">
<Layout type="PatternLayout">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</Layout>
</Appender>
<!-- log to console-->
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="%d %p %C{1.} [%t] %m%n"/>
<Filters>
<Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL"/>
<Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
</Filters>
</Appender>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
我这样使用 log4j2:
@SpringBootApplication
public class DemoApplication extends ServletInitializer { //
private static final Logger shortMessageLogger = LogManager.getLogger("shortMessageLogger");
public static void main(String[] args) {
shortMessageLogger.error("start running...");
SpringApplication.run(DemoApplication.class, args);
}
}
还有我的 application.properies:
logging.config=classpath:log4j2.xml
我的 maven 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- exclusion embedded loggin -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-appserver</artifactId>
<version>2.17.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>Demo</finalName>
</build>
</project>
我发现可能是因为 tomcat9 有自己的记录器配置并覆盖了我的配置。 我还参考了Apache log4j2 文档,但由于不够具体而失败。 那么我在哪里可以获得更详细的过程?
Tomcat 默认使用java.util.logging
作为其日志记录后端,因此它不会干扰您的应用程序日志记录。
缺少日志的最可能原因是创建文件./src/logs/myLog.log
时的权限问题。 该错误应由 Log4j 的状态记录器记录(在stdout
上,通常以catalina.out
结束)。
当您运行 Tomcat 服务器时,您永远无法假设服务器的工作目录,因此您不应使用相对路径。 日志文件更安全的位置是${sys:catalina.base}/logs/myLog.log
,因为 Tomcat 可以写入该目录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.