将Spring与Log4j2集成

时间:2016-02-04 23:01:03

标签: java spring maven spring-mvc log4j2

我想Spring使用Log4j2进行日志记录,因为有时我想获得调试级别。我已经阅读了大量相关的主题和示例,但是noithing正在工作..我设法配置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>

如果有什么相关内容我没有告诉 - 告诉我

我真的非常乐意帮助我解决这个问题。

3 个答案:

答案 0 :(得分:0)

<!-- Log4j Configuration -->
<bean id="log4jInitializer" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod">
        <value>org.springframework.util.Log4jConfigurer.initLogging</value>
    </property>
    <property name="arguments">
        <list>
            <value>${path.to.log4j.file}</value>
        </list>
    </property>
</bean>

在弹簧上下文文件中添加它

答案 1 :(得分:0)

我相信Spring使用commons记录,所以你需要commons记录jar和log4j-jcl jar。

答案 2 :(得分:0)

如果有人正在使用 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)进行 commons-logging 排除,以便改用 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 中的详细信息和示例