我想 Spring 使用 Log4j2 进行日志记录,因为有时我想获得调试级别。我已经阅读了大量相关主题和示例,但没有任何效果。我设法配置 log4j2 并从我自己的类中记录,但不是从 spring 中记录。
我得到了什么:
Maven 依赖项:
<dependencies>
<!-- SERVLT API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- APACHE TILES -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.5</version>
</dependency>
<!-- APACHE FILEUPLOAD -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- Spring ORM support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- SPRING SECURITY -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- LOGGING -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${logger.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${logger.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>${logger.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${logger.version}</version>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- POSTGRE DRIVER -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1207.jre7</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- JACKSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
log4j.xml:(编辑:文件名是log4j2.xml - 抱歉错误)
<Configuration status="debug">
<Appenders>
<RollingFile name="systemLog" fileName="C:\\test\logs\system.log" includeLocation="true"
filePattern="C:\\test\logs\system-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{ISO8601} - %-5level [%t] %C %M %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="15 MB"/>
</Policies>
</RollingFile>
<Async name="systemAsyncAppender" includeLocation="true">
<AppenderRef ref="systemLog" />
</Async>
</Appenders>
<Loggers>
<Logger name="org.springframework.web" level="debug">
<AppenderRef ref="systemAsyncAppender" />
</Logger>
<Root level="debug" includeLocation="true">
<AppenderRef ref="systemAsyncAppender" />
</Root>
</Loggers>
如果有一些我没有告诉的相关内容 - 告诉我
我将非常感谢您帮助我解决这个问题
最佳答案
如果有人正在使用 Spring 5 并阅读这篇文章,请注意,如 initial Spring 5 documentation 中所述。 (或者在 current version 中进行更简要的解释):
- 不再需要像 JCL-over-SLF4J 这样的外部桥,相应地也不需要从 spring-core 依赖项中手动排除标准 Commons Logging jar。
- 只需将 Log4j 2.x 或 SLF4J 放在类路径中,无需任何额外的桥接 jar,或者依靠通过 JUL 进行的默认日志记录(具有可自定义的 JUL 设置)。
也就是说,对于 Log4j 2
,将其依赖项添加到 pom.xml
中,如下所示:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
- 从 Spring 5 开始,删除对外部 Commons Logging 桥的任何引用,以及从现有 spring-core 依赖项设置中手动排除标准 Commons Logging jar 的任何内容。您的 Log4j 或 SLF4J 或 JUL 设置将继续工作,无需更改。请注意,您可能仍然需要对其他库(例如 Apache HttpClient、Castor、HtmlUnit)进行公共(public)日志记录排除,以便改为使用 Spring 的 JCL 桥。
作为如何使用 Log4j2 的提醒:
在你的java代码中
根据 Apache Log4j 2 documentation :
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class HelloWorld {
private static final Logger logger = LogManager.getLogger("HelloWorld");
public static void main(String[] args) {
logger.info("Hello, World!");
}
}
配置文件位于/src/main/resources
您将需要一个 log4j2
配置文件,采用 xml
、json
或 yaml
格式。
详细信息和示例参见 Log4j 2 reference documentation
关于java - 将 Spring 与 Log4j2 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35213341/