■ はじめに
AWS/Lambda の Java のロギングについて、調べたところhttps://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-logging.html
~~~~~~~~~ Log4j™ 2 のカスタム Appender AWS Lambda は、Log4j 2 を使用してカスタム Appender を提供することをお勧めします。。 ~~~~~~~~~ とのことだった。 Log4jは、以下の関連記事でも扱ったが、 Log4j 2 について、触ったことなかったので、調べてみた。
■ Log4j との違い
* propertiesファイル が使えない => XML(log4j2.xml)だけでなく、代わりに(?)、 YAML(log4j2.yml)、JSON(log4j2.json)が使えるようになった
■ 設定
モジュールを落とす
* 今回は、Gradle を使うhttps://logging.apache.org/log4j/2.x/maven-artifacts.html
build.gradle
dependencies { // Log4j 2 compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.11.0' compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.11.0' // For AWS //compile group: 'com.amazonaws', name: 'aws-lambda-java-log4j2', version: '1.1.0' }
■ サンプル
log4j2.xml
src/main/resources配下に置く<?xml version="1.0" encoding="UTF-8"?> <configuration status="off"> <Properties> <Property name="default_format">%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-5level %C{1}:%L - %msg%n</Property> <Property name="log_file">C:/temp/sample_log4j.log</Property> <Property name="log_file_pattern">C:/temp/sample_log4j%d{yyyy-MM-dd}-%i.log</Property> </Properties> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout> <pattern>${default_format}</pattern> </PatternLayout> </Console> <RollingFile name="LogOutput" append="true" fileName="${log_file}" filePattern="${log_file_pattern}"> <PatternLayout> <pattern>${default_format}</pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="1KB"/> </Policies> <DefaultRolloverStrategy max="5"/> </RollingFile> </appenders> <loggers> <root level="trace"> <AppenderRef ref="Console" /> <AppenderRef ref="LogOutput" /> </root> </loggers> </configuration>
LogDemo.java
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class LogDemo { private static final Logger logger = LogManager.getLogger(LogDemo.class); public static void main(String[] args) { logger.trace("!! trace !! {}", "Hello, World"); logger.debug("!! debug !! {}", "Hello, World"); logger.info("!! info !! {}", "Hello, World"); logger.warn("!! warn !! {}", "Hello, World"); logger.error("!! error !! {}", "Hello, World"); logger.fatal("!! fatal !! {}", ClassLoader.getSystemResource("log4j2.xml")); } }出力結果(コンソールと「C:\temp\sample_log4j.log」)
2018-04-16 21:24:01.592 [main] TRACE LogDemo:10 - !! trace !! Hello, World 2018-04-16 21:24:01.596 [main] DEBUG LogDemo:11 - !! debug !! Hello, World 2018-04-16 21:24:01.596 [main] INFO LogDemo:12 - !! info !! Hello, World 2018-04-16 21:24:01.596 [main] WARN LogDemo:13 - !! warn !! Hello, World 2018-04-16 21:24:01.596 [main] ERROR LogDemo:14 - !! error !! Hello, World 2018-04-16 21:24:01.596 [main] FATAL LogDemo:15 - !! fatal !! file:/C:/workspace/SampleDemo/bin/log4j2.xml
■ log4j 2 あれこれ
String.format( %s ) みたいな使い方をしたい
// {} 部分に「Hello, World」が出力される logger.trace("... {}", "Hello, World");
参考文献
公式サイト
https://logging.apache.org/log4j/2.x/AWS/Lambda Java
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/java-logging.htmlその他一般サイト
http://yamashiro0110.hatenadiary.jp/entry/2014/08/24/093336https://itsakura.com/java-log4j2-sample