2017年11月4日土曜日

SpringでLog4j2

以前にServletのログ出力はlog4jを使用したことがあり、Springを使用したプログラミングでもLog4jを使用と思い、Log4j2の設定をしたので、備忘録として残しておく。

まず、pom.xmlにLog4j2で必要なタグを追加する。

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

次にartifactId が spring-boot-starter の箇所にLogbackを除外する設定を追加する。

<exclusions>
    <exclusion>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
</exclusions>


設定変更後のpom.xmlは以下の通り。

* pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

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

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <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-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>


そして、Log4j2のログ出力の設定ファイルの設定をする。



src/main/javaの直下にlog4j2.xmlを配置して、以下のように編集する。
(ログはlogsフォルダ以下に出力するようにする。)

* log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <Properties>
        <Property name="app_name">demo</Property>
        <Property name="date">%d{yyyy-MM-dd HH:mm:ss.SSS}</Property>
        <Property name="daily_log">logs/app_${app_name}_%d{yyyy-MM-dd}.log</Property>
        <Property name="monthly_log">logs/app_monthly_${app_name}_%d{yyyy-MM}.log</Property>
        <Property name="error_daily_log">logs/app_error_${app_name}_%d{yyyy-MM-dd}.log</Property>
    </Properties>
    <appenders>
        <Console
            name="Console"
            target="SYSTEM_OUT"
        >
            <PatternLayout pattern="${date}, [${app_name}], [ %-5level ], %logger{10}, %msg %n" />
        </Console>
        <RollingFile
            name="File"
            fileName="logs/app.log"
            filePattern="${daily_log}.gz"
        >
            <PatternLayout pattern="${date}, [${app_name}], [ %-5level ], %logger{10}, %msg %n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
        <RollingFile
            name="ErrorFile"
            fileName="logs/app_error.log"
            filePattern="${error_daily_log}.gz"
        >
            <RegexFilter regex="\[ ERROR \]" />
            <PatternLayout pattern="${date}, [${app_name}], [ %-5level ], %logger{10}, %msg %n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
        <RollingFile
            name="MonthlyFile"
            fileName="logs/app_monthly.log"
            filePattern="${monthly_log}.gz"
        >
            <PatternLayout pattern="${date}, [${app_name}], [ %-5level ], %logger{10}, %msg %n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
    </appenders>
    <loggers>
        <root level="info">
            <appender-ref ref="Console" />
            <appender-ref ref="File" />
            <appender-ref ref="MonthlyFile" />
            <appender-ref ref="ErrorFile" />
        </root>
    </loggers>
</configuration>


ひとまず、これで設定は完了。
そして、STSのメニューバーの「Run」-「Run As」-「Spring Boot App」をクリックして、Springを起動してLog4j2のログを出力していることを確認してみる。
以下のキャプチャのようにlogsフォルダ以下のlogファイル内容にログが出力されていれば、OK!


0 件のコメント :

コメントを投稿