user2413742
user2413742

Reputation: 63

Spring boot logging into multiple files

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

Upvotes: 6

Views: 18338

Answers (3)

Bheem  Singh
Bheem Singh

Reputation: 707

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>

Upvotes: 0

Essex Boy
Essex Boy

Reputation: 7968

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>

Upvotes: 2

abhishek ringsia
abhishek ringsia

Reputation: 2050

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

Upvotes: 0

Related Questions