2017年11月4日土曜日

SpringでLog4j2

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

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

  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-log4j2</artifactId>
  4. </dependency>

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

  1. <exclusions>
  2.     <exclusion>
  3.         <groupId>org.springframework.boot</groupId>
  4.         <artifactId>spring-boot-starter-logging</artifactId>
  5.     </exclusion>
  6. </exclusions>


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

* pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.  
  6.     <groupId>com.example</groupId>
  7.     <artifactId>demo</artifactId>
  8.     <version>0.0.1-SNAPSHOT</version>
  9.     <packaging>jar</packaging>
  10.  
  11.     <name>demo</name>
  12.     <description>Demo project for Spring Boot</description>
  13.  
  14.     <parent>
  15.         <groupId>org.springframework.boot</groupId>
  16.         <artifactId>spring-boot-starter-parent</artifactId>
  17.         <version>1.5.8.RELEASE</version>
  18.         <relativePath/> <!-- lookup parent from repository -->
  19.     </parent>
  20.  
  21.     <properties>
  22.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23.         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  24.         <java.version>1.8</java.version>
  25.     </properties>
  26.  
  27.     <dependencies>
  28.         <dependency>
  29.             <groupId>org.springframework.boot</groupId>
  30.             <artifactId>spring-boot-starter-web</artifactId>
  31.         </dependency>
  32.  
  33.         <dependency>
  34.             <groupId>org.springframework.boot</groupId>
  35.             <artifactId>spring-boot-starter</artifactId>
  36.             <exclusions>
  37.                 <exclusion>
  38.                     <groupId>org.springframework.boot</groupId>
  39.                 <artifactId>spring-boot-starter-logging</artifactId>
  40.                 </exclusion>
  41.             </exclusions>
  42.         </dependency>
  43.  
  44.         <dependency>
  45.             <groupId>org.springframework.boot</groupId>
  46.             <artifactId>spring-boot-starter-log4j2</artifactId>
  47.         </dependency>
  48.  
  49.         <dependency>
  50.             <groupId>org.springframework.boot</groupId>
  51.             <artifactId>spring-boot-starter-test</artifactId>
  52.             <scope>test</scope>
  53.         </dependency>
  54.  
  55.         <dependency>
  56.             <groupId>org.springframework.boot</groupId>
  57.             <artifactId>spring-boot-starter-thymeleaf</artifactId>
  58.         </dependency>
  59.     </dependencies>
  60.  
  61.     <build>
  62.         <plugins>
  63.             <plugin>
  64.                 <groupId>org.springframework.boot</groupId>
  65.                 <artifactId>spring-boot-maven-plugin</artifactId>
  66.             </plugin>
  67.         </plugins>
  68.     </build>
  69.  
  70.  
  71. </project>


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



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

* log4j2.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration status="OFF">
  3.     <Properties>
  4.         <Property name="app_name">demo</Property>
  5.         <Property name="date">%d{yyyy-MM-dd HH:mm:ss.SSS}</Property>
  6.         <Property name="daily_log">logs/app_${app_name}_%d{yyyy-MM-dd}.log</Property>
  7.         <Property name="monthly_log">logs/app_monthly_${app_name}_%d{yyyy-MM}.log</Property>
  8.         <Property name="error_daily_log">logs/app_error_${app_name}_%d{yyyy-MM-dd}.log</Property>
  9.     </Properties>
  10.     <appenders>
  11.         <Console
  12.             name="Console"
  13.             target="SYSTEM_OUT"
  14.         >
  15.             <PatternLayout pattern="${date}, [${app_name}], [ %-5level ], %logger{10}, %msg %n" />
  16.         </Console>
  17.         <RollingFile
  18.             name="File"
  19.             fileName="logs/app.log"
  20.             filePattern="${daily_log}.gz"
  21.         >
  22.             <PatternLayout pattern="${date}, [${app_name}], [ %-5level ], %logger{10}, %msg %n" />
  23.             <Policies>
  24.                 <TimeBasedTriggeringPolicy />
  25.             </Policies>
  26.         </RollingFile>
  27.         <RollingFile
  28.             name="ErrorFile"
  29.             fileName="logs/app_error.log"
  30.             filePattern="${error_daily_log}.gz"
  31.         >
  32.             <RegexFilter regex="\[ ERROR \]" />
  33.             <PatternLayout pattern="${date}, [${app_name}], [ %-5level ], %logger{10}, %msg %n" />
  34.             <Policies>
  35.                 <TimeBasedTriggeringPolicy />
  36.             </Policies>
  37.         </RollingFile>
  38.         <RollingFile
  39.             name="MonthlyFile"
  40.             fileName="logs/app_monthly.log"
  41.             filePattern="${monthly_log}.gz"
  42.         >
  43.             <PatternLayout pattern="${date}, [${app_name}], [ %-5level ], %logger{10}, %msg %n" />
  44.             <Policies>
  45.                 <TimeBasedTriggeringPolicy />
  46.             </Policies>
  47.         </RollingFile>
  48.     </appenders>
  49.     <loggers>
  50.         <root level="info">
  51.             <appender-ref ref="Console" />
  52.             <appender-ref ref="File" />
  53.             <appender-ref ref="MonthlyFile" />
  54.             <appender-ref ref="ErrorFile" />
  55.         </root>
  56.     </loggers>
  57. </configuration>


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


0 件のコメント :

コメントを投稿