代码之家  ›  专栏  ›  技术社区  ›  Abhijith Madhav

在web应用程序中配置log4j2

  •  0
  • Abhijith Madhav  · 技术社区  · 7 年前

    我无法在log4j2配置文件中看到已启用的调试日志。

    我的代码组织如下。我正在使用gradle的“java”和“war”插件,我的代码组织是根据那里指定的默认值。

    .
    ├── main
    │   ├── java
    │   │   └── am
    │   │       └── login
    │   │           ├── common
    │   │           │   └── LoginWebAppConfiguration.java
    │   │           └── google
    │   │               └── GoogleLogin.java
    │   ├── resources
    │   │   └── log4j2.xml
    │   └── webapp
    │       └── WEB-INF
    │           ├── pages
    │           │   └── google.html
    │           ├── spring
    │           │   └── mvc
    │           │       └── login-servlet.xml
    │           └── web.xml
    └── test
        ├── java
        └── resources
    

    我的log4j2配置

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Configuration status="WARN" monitorInterval="5">
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            </Console>
                <File name="LogFile" fileName="logs/login.log">
                    <PatternLayout>
                        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                    </PatternLayout>
                </File>
        </Appenders>
    
        <Loggers>
            <Root level="DEBUG">
                <AppenderRef ref="Console" />
                <AppenderRef ref="LogFile"/>
            </Root>
            <Logger name="org.springframework" level="DEBUG" />
            <Logger name="am.login" level="DEBUG" />
        </Loggers>
    </Configuration>
    

    我的网络。xml没有显式配置log4j2,因为我使用Servlet规范3.1 here

    这是我的部署结构

    .
    ├── META-INF
    │   ├── MANIFEST.MF
    │   └── war-tracker
    └── WEB-INF
        ├── classes
        │   ├── am
        │   │   └── login
        │   │       ├── common
        │   │       │   └── LoginWebAppConfiguration.class
        │   │       └── google
        │   │           └── Login.class
        │   └── log4j2.xml
        ├── lib
        │   ├── commons-logging-1.2.jar
        │   ├── log4j-api-2.9.0.jar
        │   ├── log4j-core-2.9.0.jar
        │   ├── log4j-slf4j-impl-2.9.0.jar
        │   ├── log4j-web-2.9.0.jar
        │   ├── slf4j-api-1.7.25.jar
        │   ├── spring-aop-4.3.11.RELEASE.jar
        │   ├── spring-beans-4.3.11.RELEASE.jar
        │   ├── spring-context-4.3.11.RELEASE.jar
        │   ├── spring-core-4.3.11.RELEASE.jar
        │   ├── spring-expression-4.3.11.RELEASE.jar
        │   ├── spring-web-4.3.11.RELEASE.jar
        │   └── spring-webmvc-4.3.11.RELEASE.jar
        ├── pages
        │   └── google.html
        ├── spring
        │   └── mvc
        │       └── login-servlet.xml
        └── web.xml
    

      // log using slf4j
        compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    
        // reroute slf4j to log4j2
        compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.9.0'
        compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.9.0'
        compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.9.0'
    
        // In order to properly support and handle the ClassLoader environment and container lifecycle of a JEE web application
        compile group: 'org.apache.logging.log4j', name: 'log4j-web', version: '2.9.0'
    

    我错过了什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Abhijith Madhav    7 年前

    Spring使用JCL进行日志记录。我需要在我的类路径中包含JCL API的log4j2实现,以显示spring日志。提到 this

    我的身材。gradle现在看起来像这样记录依赖项

        // log using slf4j
        compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    
        // log4j2 binding or implementation for slf4j
        compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.9.0'
    
        // spring uses apache commons logging api. This provides a log4j2 implementation for commons logging
        compile 'org.apache.logging.log4j:log4j-jcl:2.9.0'