【发布时间】:2022-01-19 11:04:45
【问题描述】:
我知道有很多类似的帖子,但其中没有解决方案对我有用。我在 eclipse 中创建了一个简单的 java 代码,我在控制台屏幕中得到了输出,但是没有生成日志文件。
log4j2.properties:
name=PropertiesConfig
property.filename = logs
appenders = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=${filename}/propertieslogs.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.file.append=true
appender.file=org.apache.log4j.RollingFileAppender
loggers=file
logger.file.name=Processors
logger.file.level = trace
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE
rootLogger.level = trace
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger= INFO, file, stdout
依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>2.6.1</version>
</dependency>
java代码:
public class GetRoomsProcessor implements Processor{
private static Logger logger = LogManager.getLogger(GetRoomsProcessor.class);
public void process(Exchange xchg) throws Exception {
...
String statusCode = String.valueOf(response.statusCode());
if (statusCode.equals("200") || statusCode.equals("201")) {
...
rooms.setRooms(listdata);
Gson g = new Gson();
String str = g.toJson(rooms);
//System.out.println(str);
logger.info(str);
logger.warn("This is a warn message");
logger.trace("This is a trace message");
xchg.getIn().setBody(str);
}
我需要做什么才能将日志写入文件? 谢谢
更新: 我还尝试添加以下依赖项,但仍然无效:
<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.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.16.0</version>
</dependency>
【问题讨论】:
-
当你启动你的spring应用程序时,你知道log4j是否找到了log4j.properties文件吗?我相信你没有正确初始化 log4j。
-
你好@MinhKieu,如果它在控制台中显示日志,你不认为它是在读取属性文件吗?
-
除了我在应用程序的开头出现以下红色警告之外,我不知道它是否与我的情况有关:
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/User/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.14.1/log4j-slf4j-impl-2.14.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] ... SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] -
更好地升级到 2.16.0(其中导致问题的类已被删除),因为 2.15.0 在某些情况下仍然存在漏洞。还请更新您的问题,以避免有人复制具有漏洞的依赖项。
-
使用
-Dlog4j.debug标志运行您的应用程序。这将打印出有关找到并加载了哪个 log4j 属性文件的信息。
标签: java eclipse logging apache-camel log4j2