我尝试过 application.properties
logging.level.org.springframework.security= DEBUG
logging.level.org.hibernate= DEBUG
logging.file=D:/LogDemo/DemoDebug.log
logging.level.root= WARN
logging.file=D:/LogDemo/DemoWarn.log
但是日志仅附加在最后一个文件中(此处为demoinfo.log) 如果ERROR级别是最后一级,则只有日志才会附加到指定的文件中。
我也尝试了log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<appender name="DEBUG-LOG-FILE" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="file" value="D:/LogDemo/Debug.log"/>
<param name="append" value="true" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<param name="FileNamePattern" value="Debug.%d{yyyy-MM-dd}.log.zip"/>
<!-- keep 30 days' worth of history
<param name="MaxBackupIndex" value="30"/> -->
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<!--<Pattern>%d{HH:mm:ss.SSS} %-5level [%thread] %logger{35} - %msg%n</Pattern>-->
<param name="ConversionPattern" value="%d %-5p %logger{35} - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="debug"/>
<param name="AcceptOnMatch" value="true"/>
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter"/>
</appender>
<appender name="ERROR-LOG-FILE" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="file" value="D:/LogDemo/Error.log"/>
<param name="append" value="true" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<param name="FileNamePattern" value="Error.%d{yyyy-MM-dd}.log.zip"/>
<!-- keep 30 days' worth of history
<param name="MaxBackupIndex" value="30"/> -->
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<!--<Pattern>%d{HH:mm:ss.SSS} %-5level [%thread] %logger{35} - %msg%n</Pattern>-->
<param name="ConversionPattern" value="%d %-5p %logger{35} - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="error" />
<param name="AcceptOnMatch" value="true"/>
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
<appender name="INFO-LOG-FILE" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="file" value="D:/LogDemo/Info.log"/>
<param name="append" value="true" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<param name="FileNamePattern" value="Info.%d{yyyy-MM-dd}.log.zip"/>
<!-- keep 30 days' worth of history
<param name="MaxBackupIndex" value="30"/> -->
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<!--<Pattern>%d{HH:mm:ss.SSS} %-5level [%thread] %logger{35} - %msg%n</Pattern>-->
<param name="ConversionPattern" value="%d %-5p %logger{35} - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="info" />
<param name="AcceptOnMatch" value="true"/>
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %logger{35} - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="debug" />
<param name="AcceptOnMatch" value="true"/>
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>
<root>
<level value="debug" />
<appender-ref ref="DEBUG-LOG-FILE" />
<appender-ref ref="ERROR-LOG-FILE" />
<appender-ref ref="INFO-LOG-FILE" />
<appender-ref ref="STDOUT" />
</root>
但是我无法看到任何与log4j2.xml相关的结果(需要任何配置吗?)
请帮忙。提前谢谢。
答案 0 :(得分:1)
问题
spring-boot-starter-logging
排除在外并spring-boot-starter-log4j2
作为项目的依赖项添加了? log4j2.xml
看起来不合适 - 它是相当的logback语法而不是log4j2的语法。 要在不同文件之间拆分日志条目 - 使用log4j2
,您需要:
排除日志记录并添加log4j2依赖项:
<dependencies>
<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.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>
在log4j2.xml中进行更改。这个想法是过滤掉所有其他级别。请注意,我将WARN和INFO分组到同一个文件中
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">
%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex
</Property>
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<RollingFile name="File-DEBUG" fileName="logs/app-debug.log" filePattern="logs/app-debug-%d{MM-dd-yyyy}.log.gz"
ignoreExceptions="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy/>
<Filters>
<ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
<RollingFile name="File-INFO" fileName="logs/app-info.log" filePattern="logs/app-info-%d{MM-dd-yyyy}.log.gz"
ignoreExceptions="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy/>
<Filters>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
<RollingFile name="File-ERROR" fileName="logs/app-error.log" filePattern="logs/app-error-%d{MM-dd-yyyy}.log.gz"
ignoreExceptions="false">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<TimeBasedTriggeringPolicy/>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="File-INFO"/>
<AppenderRef ref="File-ERROR"/>
<AppenderRef ref="File-DEBUG"/>
</Root>
</Loggers>
</Configuration>
测试它:
package com.example.demo;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
private static final Logger logger = LogManager.getLogger(DemoApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
logger.error("this is an error");
logger.warn("this is a warning");
logger.info("this is an info");
logger.debug("this is debug");
}
}