gpt4 book ai didi

spring - Log4j2 和 Spring 4

转载 作者:行者123 更新时间:2023-12-04 18:02:26 26 4
gpt4 key购买 nike

我无法让 Log4j2 在日志文件上写入 Spring 和 Spring Security 日志消息(后者我绝对需要 to solve an issue )。我在这里和其他地方阅读了很多(当然,例如在 Spring reference 中),但我无法找到适合我的案例的解决方案。

重要的是要注意,在下面的两个解决方案中, 矿井日志消息和休眠消息都正确写入文件。该问题仅影响 Spring 消息。

据我了解,Spring 使用 jcl(commons-logging),有两种方法可以让 Spring 使用 Log4j2:

  • 只需添加网桥 log4j-jcl (jcl -> log4j2)
  • 使用 SLF4J 和 jcl-over-jcl log4j-slf4j-impl (jcl -> slf4j185) -> 6 logx9

    我试图从所有其他依赖项中排除 commons-logging,以便手动控制它的包含。在第一个解决方案中我让它包括在内,在第二个解决方案中我排除了它,但我已经看到了关于这个主题的不同意见。无论如何,在这两种情况下,Spring 都不会登录。

    我可以看到休眠使用 jboss-logging 。这就是它适用于两种配置的原因吗?它的包含是否会成为 Spring 日志记录的问题?

    应用服务器会不会在这方面有问题?也许某些默认加载的库会覆盖应用程序库,从而造成困惑?

    这是我的环境:
  • Java 1.6
  • 小服务程序 2.5
  • Oracle weblogic 12.1
  • Spring MVC 4.3.4.RELEASE
  • Spring Security 4.2.0.RELEASE
  • Log4j 2.3(与 Java 6 兼容的最新版本)
  • Hibernate 实体管理器 4.2.21.final
  • SLF4J 1.7.22

  • 我猜有一个依赖问题:一些不应该存在或丢失的库。

    编辑:
    从我的依赖关系树中,我没有看到 spring-corecommons-logging 的依赖关系,如引用所述。我可以在 spring-data-jpaslf4j 上看到 jcl-over-slf4j 之一。正如 rgoers 所建议的, jcl-over-sl4j 的存在应该是问题所在。我会更新结果...

    所以这是我的 pom.xml 依赖项部分(如您所见,有两个不同的日志依赖项配置,一个已评论;这两个配置都使我的日志和休眠日志工作良好,但两者都没有编写 Spring 的日志):
    <properties>
    <spring.version>4.3.4.RELEASE</spring.version>
    <spring.security.version>4.2.0.RELEASE</spring.security.version>
    <!--<spring.data.jpa.version>1.10.5.RELEASE</spring.data.jpa.version>-->
    <spring.data.jpa.version>1.7.2.RELEASE</spring.data.jpa.version>
    <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
    <log4j.version>2.3</log4j.version>
    <hibernate.validator.version>5.3.2.Final</hibernate.validator.version>
    <hibernate.entitymanager.version>4.2.21.Final</hibernate.entitymanager.version> <!-- LAST VERSION SUPPORTING JPA 2.0 (JPA 2.1 is not supported by WebLogic 12.1.1) -->
    <javax.transaction.version>1.1</javax.transaction.version>
    <oracle.jdbc.version>12.1.0.2</oracle.jdbc.version>
    <querydsl.jpa.version>3.6.9</querydsl.jpa.version>
    <google.guava.version>18.0</google.guava.version>
    <quartz.version>2.2.1</quartz.version>
    <pdfbox.version>2.0.4</pdfbox.version>

    </properties>

    <dependencies>

    <!-- SPRING SECURITY -->
    <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>${spring.security.version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>${spring.security.version}</version>
    </dependency>

    <!-- WEB AND VALIDATION -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>${hibernate.validator.version}</version>
    </dependency>

    <!-- THYMELEAF -->
    <dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>${thymeleaf.version}</version>
    </dependency>
    <dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring4</artifactId>
    <version>${thymeleaf.version}</version>
    </dependency>
    <dependency>
    <groupId>com.github.mxab.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-data-attribute</artifactId>
    <version>2.0.1</version>
    </dependency>

    <!-- LOGGING -->

    <!-- Using JCL -->
    <dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j.version}</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j.version}</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>${log4j.version}</version>
    <scope>runtime</scope>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>${log4j.version}</version>
    </dependency>

    <!-- Using SLF4J -->
    <!--
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.22</version>
    </dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.22</version>
    </dependency>
    &lt;!&ndash;<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.1</version>
    </dependency>&ndash;&gt;

    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>${log4j.version}</version>
    </dependency>

    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j.version}</version>
    </dependency>
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j.version}</version>
    </dependency>
    &lt;!&ndash;<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>${log4j.version}</version>
    </dependency>&ndash;&gt;
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>${log4j.version}</version>
    <scope>runtime</scope>
    </dependency>
    -->

    <!-- PERSISTENCE LIBRARIES -->
    <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>${hibernate.entitymanager.version}</version>
    </dependency>
    <dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>jta</artifactId>
    <version>${javax.transaction.version}</version>
    </dependency>

    <!-- SPRING FRAMEWORK COMPONENTS -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${spring.version}</version>
    </dependency>
    <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>${spring.data.jpa.version}</version>
    </dependency>

    <!-- ORACLE JDBC -->
    <dependency>
    <groupId>com.oracle.jdbc</groupId>
    <artifactId>ojdbc7</artifactId>
    <version>${oracle.jdbc.version}</version>
    </dependency>

    <dependency>
    <groupId>commons-configuration</groupId>
    <artifactId>commons-configuration</artifactId>
    <version>1.10</version>
    <!--<exclusions>
    <exclusion>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    </exclusion>
    </exclusions>-->
    </dependency>

    <!-- SPRING-DATA JPA DATATABLES -->
    <dependency>
    <groupId>com.github.darrachequesne</groupId>
    <artifactId>spring-data-jpa-datatables</artifactId>
    <version>3.0</version>
    </dependency>

    <!-- QUERYDSL -->
    <dependency>
    <groupId>com.mysema.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>${querydsl.jpa.version}</version>
    </dependency>

    <!-- GOOGLE GUAVA UTILS -->
    <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>${google.guava.version}</version>
    </dependency>

    <!-- APACHE PDF BOX -->
    <dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>${pdfbox.version}</version>
    <!--<exclusions>
    <exclusion>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    </exclusion>
    </exclusions>-->
    </dependency>
    <dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>fontbox</artifactId>
    <version>${pdfbox.version}</version>
    <!--<exclusions>
    <exclusion>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    </exclusion>
    </exclusions>-->
    </dependency>
    <dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox-tools</artifactId>
    <version>${pdfbox.version}</version>
    </dependency>

    <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
    </dependency>
    <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.1</version>
    </dependency>

    <!-- ESAPI security features (prevent sql injection during password change -->
    <dependency>
    <groupId>org.owasp.esapi</groupId>
    <artifactId>esapi</artifactId>
    <version>2.1.0.1</version>
    <exclusions>
    <!--<exclusion>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    </exclusion>-->
    <exclusion>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    </exclusion>
    </exclusions>
    </dependency>

    <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>${quartz.version}</version>
    </dependency>
    <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>${quartz.version}</version>
    </dependency>


    </dependencies>

    这是我的 log4j2 配置 。但我真的不认为问题出在这里。
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn">

    <Properties>
    <Property name="basePath">..\\logs\\myapp\\</Property>
    </Properties>

    <Appenders>
    <RollingFile name="fileLogger" fileName="${basePath}myapp.log" filePattern="${basePath}myapp-%d{yyyy-MM-dd}.log">
    <PatternLayout>
    <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{10} - %msg%n</pattern>
    </PatternLayout>
    <Policies>
    <TimeBasedTriggeringPolicy interval="1" modulate="true" />
    </Policies>
    </RollingFile>

    <Console name="console" target="SYSTEM_OUT">
    <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{10} - %msg%n" />
    </Console>
    </Appenders>

    <Loggers>
    <Logger name="com.myapp" level="debug" additivity="true">
    <appender-ref ref="fileLogger" level="debug" />
    </Logger>
    <Logger name="org.springframework" level="info" additivity="true">
    <appender-ref ref="fileLogger" level="info" />
    </Logger>
    <!--<Logger name="org.springframework.security" level="debug" additivity="true">
    <appender-ref ref="fileLogger" level="debug" />
    </Logger>-->
    <Logger name="org.thymeleaf" level="info" additivity="true">
    <appender-ref ref="fileLogger" level="info" />
    </Logger>

    <Logger name="org.hibernate" level="debug" additivity="true">
    <appender-ref ref="fileLogger" level="debug" />
    </Logger>

    <Root level="info" additivity="false">
    <appender-ref ref="console" />
    </Root>
    </Loggers>
    </Configuration>

    以下是我 war 中的图书馆,也许有什么障碍。
    antisamy-1.5.3.jar
    antlr-2.7.7.jar
    aopalliance-1.0.jar
    aspectjrt-1.8.4.jar
    attoparser-2.0.1.RELEASE.jar
    batik-css-1.8.jar
    batik-ext-1.8.jar
    batik-util-1.8.jar
    bridge-method-annotation-1.13.jar
    bsh-core-2.0b4.jar
    c3p0-0.9.1.1.jar
    classmate-1.3.1.jar
    codegen-0.6.8.jar
    commons-beanutils-core-1.8.3.jar
    commons-codec-1.2.jar
    commons-collections-3.2.2.jar
    commons-configuration-1.10.jar
    commons-csv-1.1.jar
    commons-fileupload-1.3.1.jar
    commons-httpclient-3.1.jar
    commons-io-1.3.2.jar
    commons-lang-2.6.jar
    commons-logging-1.2.jar
    dom4j-1.6.1.jar
    ecj-4.3.1.jar
    esapi-2.1.0.1.jar
    fontbox-2.0.4.jar
    guava-18.0.jar
    hibernate-commons-annotations-4.0.2.Final.jar
    hibernate-core-4.2.21.Final.jar
    hibernate-entitymanager-4.2.21.Final.jar
    hibernate-jpa-2.0-api-1.0.1.Final.jar
    hibernate-validator-5.3.2.Final.jar
    jackson-annotations-2.6.0.jar
    jackson-core-2.6.6.jar
    jackson-databind-2.6.6.jar
    javassist-3.18.1-GA.jar
    javax.el-api-2.2.5.jar
    javax.inject-1.jar
    jboss-logging-3.3.0.Final.jar
    jboss-transaction-api_1.1_spec-1.0.1.Final.jar
    jcl-over-slf4j-1.7.10.jar
    jsr305-1.3.9.jar
    jta-1.1.jar
    log4j-api-2.3.jar
    log4j-core-2.3.jar
    log4j-jcl-2.3.jar
    log4j-web-2.3.jar
    mysema-commons-lang-0.2.4.jar
    nekohtml-1.9.16.jar
    ognl-3.1.10.jar
    ojdbc7-12.1.0.2.jar
    pdfbox-2.0.4.jar
    pdfbox-debugger-2.0.4.jar
    pdfbox-tools-2.0.4.jar
    quartz-2.2.1.jar
    quartz-jobs-2.2.1.jar
    querydsl-apt-3.6.9.jar
    querydsl-codegen-3.6.9.jar
    querydsl-core-3.6.9.jar
    querydsl-jpa-3.6.9.jar
    slf4j-api-1.6.6.jar
    spring-aop-4.3.4.RELEASE.jar
    spring-beans-4.3.4.RELEASE.jar
    spring-context-4.3.4.RELEASE.jar
    spring-core-4.3.4.RELEASE.jar
    spring-data-commons-1.9.2.RELEASE.jar
    spring-data-jpa-1.7.2.RELEASE.jar
    spring-data-jpa-datatables-3.0.jar
    spring-expression-4.3.4.RELEASE.jar
    spring-jdbc-4.3.4.RELEASE.jar
    spring-orm-4.3.4.RELEASE.jar
    spring-security-config-4.2.0.RELEASE.jar
    spring-security-core-4.2.0.RELEASE.jar
    spring-security-web-4.2.0.RELEASE.jar
    spring-tx-4.3.4.RELEASE.jar
    spring-web-4.3.4.RELEASE.jar
    spring-webmvc-4.3.4.RELEASE.jar
    thymeleaf-3.0.2.RELEASE.jar
    thymeleaf-extras-data-attribute-2.0.1.jar
    thymeleaf-spring4-3.0.2.RELEASE.jar
    unbescape-1.1.4.RELEASE.jar
    validation-api-1.1.0.Final.jar
    xalan-2.7.0.jar
    xercesImpl-2.8.0.jar
    xml-apis-1.3.03.jar
    xml-apis-ext-1.3.04.jar
    xom-1.2.5.jar

    每一个建议都值得赞赏。

    谢谢你们,
    多尔菲兹

    最佳答案

    我有几个使用 Log4j 2 进行日志记录的 Spring 应用程序。正如您所说,推荐的方法是保留 commons-logging jar 并使用 log4j-jcl 将其桥接到 Log4j 2。在这种情况下,jcl-over-slf4j jar 必须不在场。在这种情况下,日志调用将是 commons-logging -> log4j-jcl -> log4j-api。

    正如您所说,另一种方法是删除 commons-logging jar 并将其替换为 jcl-over-slf4j。然后,您将需要已注释掉的所有 jar。在这种情况下,日志调用将是 jcl-over-slf4j -> slf4j-api -> log4j-slf4j-impl -> log4j-api。

    如您所见,第二条路径更长一些。

    顺便说一句 - 您的 log4j2 配置缺少包装 <configuration>元素。

    关于spring - Log4j2 和 Spring 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42157652/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com