quartaela
quartaela

Reputation: 2757

Spring boot using slf4j no log file created

I have a spring boot application with trying to use slf4j by following tutorial from https://www.baeldung.com/spring-boot-logging however logs are getting printed only on console side. There is no log file created in given directory /var/logs.

log4j2-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout
                    pattern="%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{1.}}{bright,yellow}: %msg%n%throwable" />
        </Console>

        <RollingFile name="RollingFile"
                     fileName="/var/logs/spring-boot-logger-log4j2.log"
                     filePattern="/var/logs/$${date:yyyy-MM}/spring-boot-logger-log4j2-%d{-dd-MMMM-yyyy}-%i.log.gz">
            <PatternLayout>
                <pattern>%d %p %C{1.} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <!-- rollover on startup, daily and when the file reaches
                    10 MegaBytes -->
                <OnStartupTriggeringPolicy />
                <SizeBasedTriggeringPolicy
                        size="10 MB" />
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- LOG everything at INFO level -->
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile" />
        </Root>

        <Logger name="com.buraktas">
            <AppenderRef ref="LogFile"/>
            <AppenderRef ref="Console"/>
        </Logger>
    </Loggers>

</Configuration>

maven dependencies

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.1.0.RELEASE</version>
    <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>

Upvotes: 2

Views: 12259

Answers (2)

Moosa Sahib
Moosa Sahib

Reputation: 31

You can define log path in the application.properties file, check the link below for example:

logging.level.com.example.springscheduler = debug
logging.level.org.springframework.web = WARN
logging.file.name =log/loggingdemocontroller.log

https://springbootmvc.blogspot.com/2020/06/spring-boot-logging-using-orgslf4jlogger.html

Upvotes: 2

quartaela
quartaela

Reputation: 2757

I found the problem where I had spring-boot-starter and spring-boot-starter-web dependencies. I excluded spring-boot-starter-logging dependency from only one of them which forced spring to use logback logger. And since logback logger doesn't pick up log4j2.xml for its configuration no files we getting created. So the pom.xml file was something like this;

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.1.0.RELEASE</version>
    <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>

I needed to exclude spring-boot-starter-logging from spring-boot-starter dependency as well. Well, after all since I have spring-boot-starter-web I just deleted spring-boot-starter package which was needless.

Upvotes: 0

Related Questions