在Java 8 Spring应用程序中,无法让文件日志与Log4j2 Slf4j一起工作。

问题描述 投票:0回答:1

我有一个java spring 5应用程序,我把它部署到Tomcat 8.5.15。我现在正试图将日志框架升级到Log4J2,我也使用Slf4J。现在的问题是,我似乎无法将日志记录到文件(虽然它创建了一个文件)。它只是记录到控制台,为什么?这是一个多模块的maven项目。在主 "pom "中,我使用了这些依赖关系(例如)。

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.2</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.13.2</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <scope>test</scope>
            <version>1.7.30</version>
        </dependency>

这里是log4j2.xml。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
    <Properties>
        <Property name="basePath">logs</Property>
    </Properties>

    <Appenders>
        <RollingFile name="fileLogger" fileName="logs/app-info.log" filePattern="logs/app-info-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %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} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="foobar" level="debug" additivity="true">
            <appender-ref ref="fileLogger" level="debug" />
        </Logger>
        <Root level="debug" additivity="false">
            <appender-ref ref="console" />
        </Root>
    </Loggers>
</Configuration>

编辑 这是第二版的配置(这产生了一个有一点内容的文件,但不是来自我的代码......来自测试的东西 "DefaultTestContextBootstrapper"......) 日志在这里结束:mymodulelogsapp-info.log。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">   
    <Appenders>
        <RollingFile name="fileLogger" fileName="logs/app-info.log" filePattern="logs/app-info-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %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} [%t] %c{1} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>        
        <Root level="info" additivity="false">
            <appender-ref ref="fileLogger" />
        </Root>
    </Loggers>
</Configuration>

在java代码中,我尝试像这样记录。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
..
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.info("....");
spring log4j slf4j tomcat8
1个回答
1
投票

请编辑 fileNamefilePattern. 你写的是绝对路径,所以日志文件在 [System root]/logs/

原状

fileName="logs/app-info.log"
filePattern="logs/app-info-%d{yyyy-MM-dd}.log"

TO-BE情况1.使用相对路径 使用相对路径如果你写了相对路径,那么日志将保存在 [project root directory]/LOG_FILE_DIR/LOG_FILE_NAME.log

fileName="./LOG_FILE_DIR/LOG_FILE_NAME.log"
filePattern="./LOG_FILE_DIR/LOG_FILE_NAME.log.gz"

情况2.使用绝对路径 使用绝对路径如果你写了绝对路径,那么日志将保存在 C:/LOG_FILE_DIR/LOG_FILE_NAME.log

fileName="./LOG_FILE_DIR/LOG_FILE_NAME.log"
filePattern="C:/LOG_FILE_DIR/LOG_FILE_NAME.log.gz"

0
投票

问题是我的maven poms不完美。我在根pom中声明了log4j2,但没有在模块中声明,所以jars(log4j2...)不在最终战争文件的classpath中,但log4j(1)在那里,所以我不得不从几个pom中去掉这个依赖关系。然后我用这个配置让它工作 (log4j2.yml):

configuration:
  name: Default
  properties:
    property:
      - name: log-path
        value: /logs
      - name: archive
        value: ${log-path}/archive
  appenders:
    Console:
      PatternLayout:
        pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
      name: Console-Appender
      target: SYSTEM_OUT
    File:
      PatternLayout:
        pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
      fileName: ${log-path}/amc.log
      name: File-Appender
    RollingFile:
      DefaultRolloverStrategy:
        max: '30'
      PatternLayout:
        pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
      Policies:
        SizeBasedTriggeringPolicy:
          size: 1 MB
      fileName: ${log-path}/rollingfile.log
      filePattern: ${archive}/rollingfile.log.%d{yyyy-MM-dd-hh-mm}.gz
      name: RollingFile-Appender
  loggers:
    logger:
      additivity: 'false'
      appender-ref:
        - level: info
          ref: Console-Appender
        - level: info
          ref: File-Appender
        - level: info
          ref: RollingFile-Appender
      level: debug
      name: se.su.it.courseservice
    root:
      appender-ref:
        ref: File-Appender
      level: info
© www.soinside.com 2019 - 2024. All rights reserved.