Spring boot logging into multiple files

2020-02-29 05:42发布

Is there any way I can configure spring boot logging to multiple files/console based on the configuration? i.e Some of the log statements should write into an audit file and normal log statements should go to console/normal log file.

Below is the code I have tried on spring boot example application.

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="file" level="DEBUG" additivity="false">
        <appender-ref ref="FILE" />
    </logger>
    <logger name="org.hello" level="ERROR" additivity="false">
        <appender-ref ref="CONSOLE" />
    </logger>
</configuration>

Below is the application.properties entries

logging.level.org.springframework.web=INFO
logging.file=logs/spring-boot-logging.log

Below the HelloController

@RestController
public class HelloController {

Logger logger = LoggerFactory.getLogger(HelloController.class);

    Logger logger1 = LoggerFactory.getLogger("file");

    @RequestMapping("/")
    public String index() {

        logger.info("My Log test");
        logger1.info("My Audit test");


        return "Greetings from Spring Boot!";
    }

}

Can someone please help? Did anyone face similar situation?

Thanks a lot

3条回答
成全新的幸福
2楼-- · 2020-02-29 06:17

Just add another logger and appender in your configuration file and create logger object using the name of Logger defined in the configuration. For more explanation check Spring boot multiple log files

查看更多
等我变得足够好
3楼-- · 2020-02-29 06:21

Spring boot logging into multiple files and we can create log into selected class also. I used the following logback.xml

<configuration>
<appender name="logOutPut" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${catalina.base}/logs/WebServe-logback.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${catalina.base}/logs/WebServe-log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>50MB</maxFileSize>    
        <maxHistory>30</maxHistory>
        <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

<appender name="errorlab" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${catalina.base}/logs/error-logback.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${catalina.base}/logs/error-log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>50MB</maxFileSize>    
        <maxHistory>30</maxHistory>
        <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

<appender name="jdbc.sqltiming.appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${catalina.base}/logs/WebServe-sql-timing.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">       
        <fileNamePattern>${catalina.base}/logs/WebServe-sql-timing-log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>50MB</maxFileSize>    
        <maxHistory>30</maxHistory>
        <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

<logger name="com.tasks.MailNotificationTask">
   <level value="ALL" />
   <appender-ref ref="errorlab" />
</logger>

<logger name="jdbc.sqltiming">
    <appender-ref ref="jdbc.sqltiming.appender" />
</logger>

<root level="debug">
    <appender-ref ref="logOutPut" />
</root>

Dependency :

     <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
查看更多
仙女界的扛把子
4楼-- · 2020-02-29 06:32

Standard logback example, two files with different packages going to different files :

<configuration>

  <appender name="FILE1" class="ch.qos.logback.core.FileAppender">
    <file>myApp1.log</file>
    <encoder>
      <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="FILE2" class="ch.qos.logback.core.FileAppender">
    <file>myApp1.log</file>
    <encoder>
      <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>

  <logger name="com.package1.foo" level="DEBUG">
    <appender-ref ref="FILE1" />
  </logger>

  <logger name="com.package2.bar" level="DEBUG">
    <appender-ref ref="FILE2" />
  </logger>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>
查看更多
登录 后发表回答