Alan Aranda
Alan Aranda

Reputation: 242

Spring boot with log4j2 and tomcat

I'm facing some troubles with a spring boot web application. I'm not using embedded tomcat, I disabled it. My web app it's using Log4j2 as logger. While debugging in Eclipse there's no problems and create my log file but with external tomcat does not. This is my pom file:

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.14.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
  </parent>

  <groupId>pos.com.incidents</groupId>
  <artifactId>pos-com-incidents</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>pos-com-incidents</name>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>

    <!-- Spring -->
    <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>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</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>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- Lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>

    <!-- Informix -->
    <dependency>
      <groupId>JDBCDrivers.Informix</groupId>
      <artifactId>ifxjdbc</artifactId>
      <version>4.10.JC4</version>
    </dependency>

    <!-- Log4j -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
    </dependency>

    <!-- Jackson -->
    <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-yaml</artifactId>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>

    <!-- Apache Commons -->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-collections4</artifactId>
      <version>4.0</version>
    </dependency>

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>

    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.9.2</version>
    </dependency>

    <dependency>
      <groupId>commons-validator</groupId>
      <artifactId>commons-validator</artifactId>
      <version>1.6</version>
    </dependency>

    <!-- Joda -->
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
    </dependency>
  </dependencies>

  <build>
    <finalName>${artifactId}</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

My Log4j2 configuration file. I like yml files.

Configuration:
  status: warn

  appenders:
    Console:
      name: AppConsole
      target: SYSTEM_OUT
      PatternLayout:
        Pattern: "%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{1.}}{bright,yellow}: %msg%n%throwable"

    RollingFile:
      - name: AppDetail
        fileName: ${catalina.home}/logs/Incidents.log
        filePattern: "${catalina.home}/logs/Incidents-%d{-yyyy-MM-dd-}-%i.log.gz"
        PatternLayout:
          pattern: "%d %p %C{1.} [%t] %m%n"
        Policies:
          OnStartupTriggeringPolicy: {}
          SizeBasedTriggeringPolicy:
            size: 50 MB
        DefaultRollOverStrategy:
          max: 30

  Loggers:
    logger:
      - name: pos.sams.incidents.logging
        level: info
        additivity: false
        AppenderRef:
          - ref: AppDetail
          - ref: AppConsole

    Root:
      level: info
      AppenderRef:
        ref: AppConsole

I don't want to use Log4j2 as a logger for tomcat but just for my app. What could be the problem and solution?

Upvotes: 5

Views: 2623

Answers (1)

Alan Aranda
Alan Aranda

Reputation: 242

If somebody is facing this problem, change ${catalina.home} for ${sys:catalina.home}, documentation helps.

http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution

Upvotes: 5

Related Questions