【问题标题】:STS not picking log4j.xml nor log4j2.properties to write in fileSTS 不选择 log4j.xml 或 log4j2.properties 写入文件
【发布时间】:2022-01-05 16:29:58
【问题描述】:

我们正在迁移到 log4j2.xml 作为 log4j2 漏洞的一部分。但是新创建的 log4j2 在应用程序启动期间没有被拾取。我已经执行了以下所有选项,但都是徒劳的。

尝试的选项

  1. 尝试添加和删除 log4j-jcl 依赖项。
  2. 删除了 spring-boot-starter-logging 依赖项。
  3. 尝试使用 log4j2.properties 而不是 log4j2.xml。
  4. 在 application.properties 中添加了 logging.config 属性。
  5. 尝试重命名 RollingFile 名称并故意提供不正确的 AppenderRef ref 以检查任何与 bean 相关的异常。但应用程序已成功启动。这意味着这个 log4j2.xml 和 log4j2.properties 文件没有被拾取。

这是我的项目的详细信息。如果需要任何其他信息,请告知。

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorinterval="30" status="info" strict="true">
    <Properties>
        <Property name="logPath">${sys:app.config.home}/logs</Property>
    </Properties>
    <Appenders>
         <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
            <PatternLayout>
                <pattern>TYPE=%level, DATE_TIME=%d, CLASS_NAME=%C, METHOD_NAME=%M, %msg%n</pattern>
            </PatternLayout>
        </Console>
        <RollingFile name="RollingFile" fileName="${logPath}/batch.log" filePattern="${logPath}/batch-%d{MM-dd-yyyy}-part%i.log.gz">
            <PatternLayout>
                <pattern>TYPE=%level, DATE_TIME=%d, CLASS_NAME=%C, METHOD_NAME=%M, %msg%n</pattern>
            </PatternLayout>
            <Policies>
                 <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="200 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="60"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="info" additivity="true" includeLocation="true">
            <AppenderRef ref="RollingFile" />
            <AppenderRef ref="ConsoleAppender" />
        </Root>
    </Loggers>
</Configuration>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.proj.ds</groupId>
    <artifactId>ProcessorBatch</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <name>ProcessorBatch</name>
    <description>ProcessorBatch project</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <log4j2.version>2.17.1</log4j2.version>
    </properties>
    <repositories>
        <repository>
            <id>MDM</id>
            <url>https://devnexus.tent.trt.proj.pri:8443/nexus/content/groups/public</url>
            <name>Proj Repo</name>
        </repository>
    </repositories> 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>           
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>               
        <dependency>
            <groupId>org.springframework.batch</groupId>
            <artifactId>spring-batch-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.8</version>
        </dependency>   
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.3</version>
        </dependency>   
        <dependency>
            <groupId>org.springframework.batch</groupId>
            <artifactId>spring-batch-infrastructure</artifactId>
            </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </dependency>   
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
        </dependency>       
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>               
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-jdk8</artifactId>
            <version>1.1.0.Final</version> 
        </dependency>       
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0.1</version>
        </dependency>   
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

application-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                            http://www.springframework.org/schema/jdbc
                            http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
                            http://www.springframework.org/schema/util 
                            http://www.springframework.org/schema/util/spring-util-3.2.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    

    <import resource="classpath:context/persistance-context.xml" />
    <import resource="classpath:context/memory-jobrepository.xml" />

    <context:component-scan base-package="com.proj.ds" />
    
    <util:properties id="configProperties" location="file:${app.config.home}/config/batchConfig.properties" />
    <context:property-placeholder location="file:${app.config.home}/config/batchConfig.properties" />
    
    <bean id="processorTasklet" class="com.proj.ds.mdm.processor.batch.tasklet.ProcessorTasklet">
        <property name="batchDao" ref="batchDao" />     
        <property name="processorService" ref="processorService" />
        <property name="threadCount" value="${batch.threadcount}" />
    </bean>

    <bean id="batchDao" class="com.proj.ds.mdm.processor.batch.dao.BatchDAOImpl">
        <property name="metaBatchMapper" ref="metaBatchMapper" />
        <property name="hubBatchMapper" ref="hubBatchMapper" />
    </bean>
    
    <bean id="processorService" class="com.proj.ds.mdm.processor.batch.service.ProcessorServiceImpl">
        <property name="projCompositeService" ref="projCompositeService" />
        <property name="endPointUrl" value="${mdm.endpoint}" />
    </bean>
        
    <bean id="projCompositeService" class="com.proj.mdm.projcomposite.port.projCompositeService">
        <property name="handlerResolver" ref="handlerResolver" />
    </bean>
    
    <bean id="handlerResolver" class="com.proj.ds.mdm.processor.batch.service.HeaderHandlerResolver"/>      

    <bean id="batchUtil" class="com.proj.ds.mdm.processor.batch.util.BatchUtil">
        <property name="configProperties" ref="configProperties" />     
    </bean>
    
</beans>

【问题讨论】:

    标签: java spring-boot spring-mvc


    【解决方案1】:

    XML 配置文件应该放在 src/main/resources 文件夹下。

    【讨论】:

    • 是的。它位于所提到的确切位置。
    【解决方案2】:

    您的 Spring Boot 项目继承自 Spring Boot Starter 父项目,该项目依赖于 SLF4J 和 logback。你可以将你的项目迁移到 logback 或者你应该删除 logback 依赖项。

    要删除 logback 依赖项,请尝试更新您的 POM 文件:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    

    【讨论】:

    • 接收转换异常:Exception in thread "main" java.lang.ExceptionInInitializerError at com.proj.ds.mdm.grouping.batch.ProcessorBatchApp.main(ProcessorBatchApp.java:16) Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j
    【解决方案3】:

    另外,由于 Spring Boot Starter 集成了 Logback,请考虑从 log4j 迁移到 Logback。 https://logback.qos.ch/manual/introduction.html.

    Logback 是由 log4j 的创始人设计的。

    这里有一个迁移工具:https://www.slf4j.org/migrator.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      相关资源
      最近更新 更多