AWS Lambda
開発者ガイド

以前のカスタム appender を Log4j™1.2 に使用する (推奨されません)

注記

Log4j v1.2 カスタム appender のサポートには、End-of-Life がマークされています。開発中の更新は受け取らず、使用することはお勧めしません。詳細については、「Log4j 1.2」を参照してください。

AWS Lambda は、カスタム Appender を提供して Log4j 1.2 をサポートします。Lambda が提供するカスタム Log4j (「Apache log4j 1.2」を参照) Appender を、Lambda 関数からのログ記録に使用できます。log.info() または log.error() など、Log4j メソッドへのあらゆる呼び出しは、CloudWatch Logs イベントを発生させます。カスタム Appender は LambdaAppender と呼ばれ、log4j.properties ファイルで使用する必要があります。aws-lambda-java-log4j アーティファクト (artifactId:aws-lambda-java-log4j) をデプロイパッケージ (.jar ファイル) に含める必要があります。例については、「例 : Log4J v1.2 を使用してログを書き込む (推奨されません) 」を参照してください。

例 : Log4J v1.2 を使用してログを書き込む (推奨されません)

注記

Log4j のバージョン1.x にはサポート終了のマークが付いています。詳細については、「Log4j 1.2」を参照してください。

次の Java コード例では、AWS Lambda が情報を CloudWatch に記録する際の違いを示すため、System メソッドと Log4j の両方を使用してログを書き込みます。

package example; import com.amazonaws.services.lambda.runtime.Context; import org.apache.logging.log4j.Logger; public class Hello { // Initialize the Log4j logger. static final Logger log = Logger.getLogger(Hello.class); public String myHandler(String name, Context context) { // System.out: One log statement but with a line break (AWS Lambda writes two events to CloudWatch). System.out.println("log data from stdout \n this is continuation of system.out"); // System.err: One log statement but with a line break (AWS Lambda writes two events to CloudWatch). System.err.println("log data from stderr. \n this is a continuation of system.err"); log.error("log data from log4j err. \n this is a continuation of log4j.err"); // Return will include the log stream name so you can look // up the log later. return String.format("Hello %s. log stream = %s", name, context.getLogStreamName()); } }

この例では、次の log4j.properties ファイル (project-dir/src/main/resources/ directory) を使用します。

log = . log4j.rootLogger = INFO, LAMBDA #Define the LAMBDA appender log4j.appender.LAMBDA=com.amazonaws.services.lambda.runtime.log4j.LambdaAppender log4j.appender.LAMBDA.layout=org.apache.log4j.PatternLayout log4j.appender.LAMBDA.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} <%X{AWSRequestId}> %-5p %c{1}:%m%n

コードをテストするために、以下の操作を行うことができます。

  • コードを使用して、デプロイパッケージを作成します。プロジェクトで、project-dir/src/main/resources/ ディレクトリに log4j.properties ファイルを追加し忘れないようにしてください。

  • デプロイパッケージを AWS Lambda にアップロードして Lambda 関数を作成します。

  • Lambda 関数をテストするには、サンプルイベントとして文字列 ("this is a test") を使用します。ハンドラーコードはサンプルイベントを受信しますが、それに対して何も行いません。ログを書き込む方法のみを示します。

「使用開始」セクションで説明している手順に従います。詳細については、次を参照してください。 (オプション) Java で Lambda 関数を作成する. 以下の違いに注意してください。

  • デプロイパッケージを作成するときに、Log4j 1.2 の依存関係に対する aws-lambda-java-log4j の依存関係を忘れないでください。

  • Lambda 関数を作成するときに、ハンドラー値として example.Hello::myHandler (package.class::method) を指定します。