当前位置: 首页 > 知识库问答 >
问题:

spring-启动项目log4j到log4j2转换问题

从建明
2023-03-14

我正在将日志框架从log4j升级到log4j2。我遵循了阿帕奇的步骤。

  1. 我将log4j.xml修改为新的标准(特别是对于附录)
  2. 将我的gradle文件升级到新的依赖项
  3. 重新构建了我的spring启动packager项目并部署了它

我在部署JAR时使用了以下系统属性:

Java dspring.profiles.active=dev-dlog4j.configurationfile=log4j2.xml-jar application.jar

但是,我的应用程序继续运行log4j,而不是log4j2。设置debug属性dlog4j.debug时,我可以看到log4j试图查找xml、属性等,然后说

找不到记录器的附加符。请参阅http://logging.apache.org/log4j/1.2/faq.

所以我在某个地方拿起了1.2版?

我相信log4j2正在运行的唯一原因是,当我将log4j2.xml的名称更改为log4j.xml时,我得到一个log4j警告,说明找不到log4j2.xml。只向控制台显示错误消息。即使log4j会同时发出消息。

有没有人在从log4j和log4j2切换时遇到类似的情况,可以提供一些帮助?

共有1个答案

王英彦
2023-03-14

这是针对3.2.1级和spring boot 1.4.2级的。

  1. 您必须导入spring-boot-starter-log4j2并排除spring-boot-starter-logging
  2. log4j.xml重命名为log4j2.xml并相应地修改它(我认为您已经这样做了)
  3. src/main/resources中复制/包含log4j2.xml文件,或者使用-dlogging.config(不是您正在使用的log4j.configurationfile引用它,因为它是spring boot应用程序)

最后,您的Gradle配置文件应该是这样的(节选):

buildscript {
  repositories {
    mavenLocal()
  }

  dependencies {
    classpath('io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE')
    classpath('org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE')
  }
}

plugins {
  // ...
}

//apply from: 'gradle/database.gradle'

apply plugin: 'idea'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
apply plugin: 'org.springframework.boot'

repositories {
  mavenCentral()
  jcenter()
}

configurations {
  all*.exclude module: 'spring-boot-starter-logging'
  //all*.exclude module: 'jboss-logging-annotations'
  //all*.exclude module: 'jboss-logging'
}

dependencyManagement {
  imports {
    mavenBom("org.springframework.boot:spring-boot-dependencies:1.4.2.RELEASE")
  }
}

dependencies {
  compile 'com.lmax:disruptor:3.3.5'
  compile 'org.springframework.boot:spring-boot-starter-actuator'
  compile 'org.springframework.boot:spring-boot-starter-log4j2'
  compile 'org.springframework.boot:spring-boot-starter-undertow'
  compile 'org.springframework:spring-webmvc'
}

task wrapper(type: Wrapper) {
  gradleVersion '3.2.1'
}

...您的log4j2.x配置文件应该如下所示(该文件仅具有登录到控制台的appender,并且debug级别仅对该名称空间/包io.shido“激活”):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Properties>
    <Property name="log-pattern">%d{MM-dd-yyyy HH:mm:ss.SSS} |- %highlight{%5p}{TRACE=blue, DEBUG=green, INFO=green, WARN=yellow, ERROR=red, FATAL=red} in %style{%C{1}:%L}{cyan} [%style{%t#${sys:PID}}{magenta}] - %m%n</Property>
  </Properties>

  <Appenders>
    <Console name="Console" target="SYSTEM_OUT" follow="true">
      <PatternLayout pattern="${log-pattern}" />
    </Console>
  </Appenders>

  <!-- Logger levels: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->
  <Loggers>
    <AsyncLogger name="io.shido" level="DEBUG" additivity="false" includeLocation="true">
      <AppenderRef ref="Console" />
    </AsyncLogger>

    <Root level="WARN">
      <AppenderRef ref="Console" />
    </Root>
  </Loggers>
</Configuration>

...如果src/main/resources中没有log4j2.xml文件,因此默认情况下会选择该文件,或者如果需要指定其他文件,请使用--logging.config指令:

$ ./gradlew bootRun -Dspring.profiles.active=default -Dfile.encoding=UTF-8 -Dlogging.config assets/log4j2.xml
 类似资料:
  • 我正在使用spring boot版本1.3.5(spring 4.2.6)开发一个应用程序。我使用log4j2版本2.4.1作为日志系统。当在sts(spring tool suite)上工作并在Embeded tomcat上执行时,日志可以正常工作(在控制台和文件上),但是当构建一个war文件并将其部署到外部Tomcat8上时,虽然创建了日志文件,但我的日志并没有出现在其中。 null 但这些解

  • 我们有一个使用Spring Boot编写的新项目,其中我们使用Log4j2进行日志记录。 问题是我们需要使用一个遗留库,我们拥有它,但我们不能改变;其他几个系统使用它,我们不能通过改变所有这些系统来扩大我们的范围。 当我们的项目运行时,它使用Log4j2记录的很好,但是当我们调用遗留库时,它会调用Log4j,从而抛出异常。 在我们使用log4j2的新应用程序中,有没有办法处理旧的log4j调用?

  • 我正在创建一个简单的spring-boot项目,方法是http://start.spring.io并选择web和执行器作为依赖项。我的spring-boot版本是1.5.2.RELEASE。项目下载到我的本地计算机。然后解压缩项目并将其作为maven项目导入到我的工作区。我使用spring STS IDE(我认为这无关紧要,但我只是想提一下)。我确实在我的项目中看到错误。显然这是一个构建路径问题,

  • 声明 接受LoggerFactory的对org.apache.Log4j.logger.getLogger的调用必须删除org.apache.Log4j.spi.LoggerFactory并使用Log4J2的其他扩展机制之一。 log4j2中有哪些扩展机制,以及如何在log4j2中最好地迁移如下所示的方法

  • 我正在处理一个使用log4j2的java项目,并且希望设置日志记录,与我在使用log4net的.net旧项目中设置的日志记录相同。 有一些事情我想不通,如何在log4j2中做。 提前道谢!