Apache Log4jは、Javaベースのロギングユーティリティである。Ceki Gülcüによって書かれたもので、Apache Software FoundationのApache Logging Servicesプロジェクトの一部である。Log4jはいくつかのJavaロギングフレームワークの一つである。

Gülcüはその後、Log4jの後継製品を提供する意図で、SLF4JとLogbackプロジェクトを開始した。

Apache Log4jチームは、Log4j 1の後継となるバージョン2を作成した。Log4j 2は、Log4j 1.2、1.3、java.util.logging、Logbackの問題点に焦点を当てて開発され、これらのフレームワークに現れた問題に対処している。 さらに、Log4j 2はプラグイン・アーキテクチャを提供し、前バージョンよりも拡張性が高くなっている。Log4j 2は、1.xバージョンとの後方互換性はないが、「アダプター」が利用できる。

2015年8月5日、Apache Logging Services Project Management Committeeは、Log4j 1が寿命に達したため、Log4j 1のユーザーはApache Log4j 2へのアップグレードを推奨すると発表した。

機能

ログレベル

Log4jは、6つのログレベルを標準提供する。この他に利用者が任意のログレベルを追加することも可能である。ログレベルが高い(情報量が少ない)ものから低い(情報量が多い)ものへと順に並べると下表の通り。

設定ファイル

Log4jは、二つの方法で設定が可能である。一つはプロパティファイル、もう一つはXMLファイルである。両者とも、3つの主要なコンポーネント(ロガー、アペンダ、レイアウト)について定義することができる。ファイルにより設定を行うため、Log4jを使用しているアプリケーションを変更することなく、ロギングをon/offできるという利点がある。たとえば、問題が発生するまではロギングをoffで動作させておき、設定ファイルを変更することで簡単にロギングを再開する、という使い方ができる。

ロガー (Loggers) は論理的なログファイル名であり、Javaアプリケーションはこれらの名前を意識する。個々のロガーにて取得するログのレベル(FATAL、ERROR等々)はロガー毎に独立に設定できる。古いバージョンのLog4jでは、これらは「カテゴリ」と「優先度」と呼ばれていたが、現バージョンではそれぞれ「ロガー」と「レベル」と呼んでいる。

アペンダ (Appenders) は具体的な出力処理を行う。アペンダには様々な種類があり、それぞれ内容を表す名前が付いている。例えばFileAppender、ConsoleAppender、SocketAppender、SyslogAppender、NTEventLogAppenderなどがあり、SMTPAppenderというものさえある。任意のロガーには複数のアペンダを付与できるので、同じログ情報を例えばローカルのファイルと他のコンピュータ上のソケットリスナに同時に出力する、などという使い方が可能。

レイアウト (Layouts) は一件ずつのログを整形するためにアペンダによって参照される。例えば行単位に出力するログを整形する方法としてPatternLayoutというものがあり、これはC言語のprintf関数によく似た書式指定子を使える。他にもHTMLLayoutやXMLLayoutなどがあり、これらはそれぞれHTMLやXMLの書式に整形したい場合に使える。

設定例

(訳注:この設定例中に出現する「カテゴリ」という用語と、「ロガー」の旧称としての「カテゴリ」との関係は不詳。)

ログビューア

ApacheにはChainsawという別プロジェクトが存在しており、これはLog4jにて生成されたログファイルを利用する。ChainsawはJavaベースのGUIビューアであり、豊富な機能を持つ。ChainsawもLog4jに類似した設定ファイルを使用する。Log4j向けのビューアは他にもあるが(例:log2webオープンソースかつウェブベース)、Chainsawに比較して機能が少ない。

Log4Shell

2021年12月9日、Log4j 2のリモートコード実行ゼロデイ脆弱性Log4Shell(CVE-2021-44228)が表面化した。影響を受けるサービスには、iCloud、Minecraft、Steamなどがある。この脆弱性の原因となる機能は、その数日前に正式にリリースされたバージョン2.15.0ではデフォルトで無効化されている。Apache Software Foundationは、CVSSの深刻度評価を最高点の10に指定した。12月14日時点では脆弱性を利用した攻撃が観測されている。

脚注

外部リンク

  • Log4j公式サイト (英語)

ポート

  • Log4c - C言語用port
  • Log4perl - Perl用port
  • Log4net - .NET Framework用port
  • log4php - PHP用port
  • Log4js - JavaScript用port
  • Log4js-node - Node.js用port
  • Log4plsql - Oracle PL/SQL用port

What is Log4j vulnerability, and who’s affected? NordPass

Log4J Vulnerability

Log4j Vulnerability What you Need to Know Source Code Control Limited

Hilfe beim Schutz vor Log4j Cloudflare

Log4j Naukri Code 360