我有一个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("....");
请编辑 fileName
和 filePattern
. 你写的是绝对路径,所以日志文件在 [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"
问题是我的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