我想在我的logfile.log中只维护一个WARN、ERROR和FATAL的日志,而希望以上所有信息都写入我的春季启动应用程序中的控制台。我看到,当我执行log.level.root=WARN
时,在application.properties文件中,它为整个应用程序设置了一个WARN的日志级别。在控制台中显示所有日志消息,但在文件中只写入WARN以上的日志消息,我该怎么办?
还有!!!!是否有一种方法可以将级别设置为INFO,并在文件中只写入特定的日志。例如,我想用INFO级别跟踪日志中的每一次登录/注销/文件更改(比如与业务逻辑相关(,但不想看到像这样的应用程序启动期间弹出的默认INFO消息
2018-07-11 10:19:00.554 INFO 11190 --- [ main] c.v.guruji.GurujiApplication : Started GurujiApplication in 10.307 seconds (JVM running for 11.029)
.
好吧,我浏览了一些logback文档,基本上找到了该做什么。
我将此代码发布给其他有类似问题的人,以供快速参考。
但我建议先查阅一份适当的文件,以便清楚地理解它。
xml(用于将每个级别的日志记录在一个单独的文件中,并在控制台上显示所有日志(
<?xml version="1.0" encoding="UTF-8"?>
<property name="DEV_HOME" value="logs" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<appender name="FILE-ERROR"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${DEV_HOME}/error.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${DEV_HOME}/archived/error.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<appender name="FILE-INFO"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${DEV_HOME}/info.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${DEV_HOME}/archived/info.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<appender name="FILE-FATAL"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${DEV_HOME}/fatal.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>FATAL</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${DEV_HOME}/archived/fatal.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<appender name="FILE-WARN"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${DEV_HOME}/warn.log</file>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${DEV_HOME}/archived/warn.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- Send logs to both console and file audit -->
<logger name="com.vaidiksanatansewa.guruji" level="fatal"
additivity="false">
<appender-ref ref="FILE-FATAL" />
</logger>
<logger name="com.vaidiksanatansewa.guruji" level="error"
additivity="false">
<appender-ref ref="FILE-ERROR" />
</logger>
<logger name="com.vaidiksanatansewa.guruji" level="warn"
additivity="false">
<appender-ref ref="FILE-WARN" />
</logger>
<logger name="com.vaidiksanatansewa.guruji" level="info"
additivity="false">
<appender-ref ref="FILE-INFO" />
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
答案取决于您计划使用的实际日志框架,spring-boot与它们中的大多数都有集成。
通常,如果选择"零配置",请使用以下行指定春季启动配置文件(application.properties / yaml
(中的事件级别:
logging.level.com.myorg=DEBUG
logging.level.root=INFO
如果你想写入文件,或者通常提供更灵活的配置,你需要配置一种叫做appender的东西,但这不是一个spring-boot的概念,而是一个日志框架术语。
因此,实际的配置将取决于特定的日志框架,通常,人们将XML配置文件(如果使用logback,则类似于logback.XML(放入src/main/resources
文件夹中,它就可以工作了。另一个现代的选择是log4j2框架。
从这个问题来看,你最好先了解如何使用这些框架,然后尝试将它们集成到spring-boot中,它们中的每一个都非常灵活,将提供你正在寻找的解决方案
这里有一个链接,指向如何将这些框架与spring-boot 一起使用的教程
以下是spring boot 官方文档的日志记录章节