首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在春季引导web应用程序中使用桥jar从log4j 1.x迁移到log4j 2.x时无法生成日志

在春季引导web应用程序中使用桥jar从log4j 1.x迁移到log4j 2.x时无法生成日志
EN

Stack Overflow用户
提问于 2022-01-04 12:18:45
回答 1查看 4.2K关注 0票数 0

我正在尝试从log4j1.x迁移到log4j2.x。

代码语言:javascript
复制
Followed this link - https://logging.apache.org/log4j/2.x/manual/migration.html

但我没有看到日志是在更改后生成的。我不知道我错过了什么。

下面是详细的log4j版本-

代码语言:javascript
复制
 <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

代之以-

代码语言:javascript
复制
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-1.2-api</artifactId>
  <version>2.6.2</version>
</dependency>
<dependency>
 <groupId>org.apache.logging.log4j</groupId>
 <artifactId>log4j-jcl</artifactId>
 <version>2.6.2</version>
</dependency>

我看到log4j-1.2.17.jar被这四个罐子取代了-

  1. log4j-jcl-2.6.2.jar
  2. log4j-core-2.1.jar
  3. log4j-api-2.1.jar
  4. log4j-1.2-api-2.6.2.jar

这是现有的配置文件(文件名/usr/local/log4j.properties) -

代码语言:javascript
复制
log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/var/log/access.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

取代了这个系统的属性值-

代码语言:javascript
复制
logging.config=/usr/local/log4j.properties

用这两条线

代码语言:javascript
复制
log4j1.compatibility=true
log4j.configuration=/usr/local/log4j.properties
EN

回答 1

Stack Overflow用户

发布于 2022-01-06 07:35:40

Spring 会在非常早期阶段重新配置日志框架的。这就是为什么您的外部log4j.properties文件在应用程序启动期间被Spring替换的原因。

如果不提供logging.config属性,将使用一个固定的类路径资源列表(cf )。( 列表)或应用默认配置。

最近的 Log4j版本上,只需设置系统属性:

代码语言:javascript
复制
logging.config=/usr/local/log4j.properties
log4j.configurationFactory=org.apache.log4j.config.Log4j1ConfigurationFactory

但是,您不能使用最近的版本,因为:

  1. 巨大的变化(参见。LOG4J2-1547)在log4j-core中呈现版本2.7.0及更高版本,与SpringBoot1.2.x不兼容,
  2. 一系列安全漏洞将您的选择进一步限制在2.3.2版本。

使用版本2.3.2,您需要将log4j.properties文件转换为Log4j 2.x格式(您可以使用转换器从这个问题):

代码语言:javascript
复制
<?xml version="1.0"?>
<Configuration name="Log4j1">
  <Appenders>
    <RollingFile name="file" fileName="/var/log/access.log"
    filePattern="/var/log/access.log.%i">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
      <Policies>
        <SizeBasedTriggeringPolicy size="5MB" />
      </Policies>
      <DefaultRolloverStrategy max="10" />
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="INFO">
      <AppenderRef ref="file" />
    </Root>
  </Loggers>
</Configuration>

并设置系统属性:

代码语言:javascript
复制
logging.config=/path/to/the/file/above.xml

备注: Spring提供了一系列启动程序,这些启动程序提取了正确的依赖项。为了使用Log4j 2.x,只需排除标准spring-boot-starter-logging并包含spring-boot-starter-log4j2。不需要显式的Log4j依赖项(除非在代码中使用Log4j 1.x ):

代码语言:javascript
复制
  <properties>
    <log4j2.version>2.3.2</log4j2.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</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>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-1.2-api</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
  </dependencies>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70578685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档