java - 将 Spring 与 Log4j2 集成

标签 java spring maven spring-mvc log4j2

我想 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 配置文件,采用 xmljsonyaml 格式。

详细信息和示例参见 Log4j 2 reference documentation

关于java - 将 Spring 与 Log4j2 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35213341/

相关文章:

java - 添加的按钮不可见

java - 使用 EntityManagerFactory 时遇到问题

java - 如何更改 Javadoc 的包以查找源文件?

maven - 在 TeamCity 中配置 cucumber 以仅使用标签运行单元测试 (Maven)

maven - 在 Maven 中,如何根据特定配置文件运行插件

java - TransformerConfigurationException : Could not compile stylesheet, 错误 - 无协议(protocol)

java - Windows和Unix上传下载动态转换的高效方式

java - Openoffice3/jodconverter 停止工作

java - Spring Security Kerberos + AD,校验和失败

java - Spring Boot没有初始化Ehcache