我在Spring Boot应用程序中使用Logback。我在logback.xml中配置了我的配置。我正在尝试为应用程序中的不同进程编写单独的日志文件。
在配置中,我正在创建额外的记录器,如下所示:
<!-- Each can be broken off into its own appender. -->
<logger name="reportsLogger" level="info"
additivity="false">
<appender-ref ref="REPORTS_APPENDER" />
</logger>
<root level="ERROR">
<appender-ref ref="GATEWAY_APPENDER" />
</root>
使用以下appender节点创建报告记录器:
<appender name="REPORTS_APPENDER"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${DEV_HOME}/reports.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${DEV_HOME}/archived/reports.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
GATEWAY_APPENDER的定义类似。 DEV_HOME节点在配置中定义为:
<property name="DEV_HOME" value="c:/app-logs" />
当应用程序启动时,会在DEV_HOME目录中创建两个日志文件。在应用程序代码中,我正在获取日志实例,如下所示:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
static Logger logger = LoggerFactory.getLogger("reportsLogger");
public static void main(String[] args) {
logger.info("*** REPORTING SERVICE STARTED ***");
SpringApplication.run(Application.class, args);
}
}
当我尝试登录到它始终写入控制台的文件时,它不会向文件本身写入任何内容。如果我尝试检查记录器实例本身(在转换为Logback Logger实例之后):
LoggerContext loggerContext = logger.getLoggerContext();
URL mainURL = ConfigurationWatchListUtil.getMainWatchURL(loggerContext);
它向我显示记录器的上下文是根记录器本身,并且没有附加到它的文件(因此控制台写入。)我需要对配置进行哪些更改以便将信息写入文件,而不是控制台?
答案 0 :(得分:1)
解决方案分为两部分。首先在main方法()中,需要在应用程序启动后进行日志记录:
SpringApplication.run(Application.class, args);
logger.info("*** REPORTING SERVICE STARTED ***");
其次,Logger需要是 ch.qos.logback.classic.Logger 的实例,而不是org.slf4j.Logger:
static Logger logger = (Logger) LoggerFactory.getLogger("reportsLogger");