Log4php 使用方法(自分用、詳しくは公式サイトへ!!)
はじめに
現在、自身が使用しているプロダクトにlog4phpを導入しようとしています
しかし、使い方がわからなかったので調べてみることに。
※極限まで突き詰めるつもりはありません!!
使い方
-
まずモノをダウンロード
Apache log4php - Download - Apache log4php
composer使っても行けるみたいです。
-
ファイルをプロダクトの任意ディレクトリ配下に解凍展開
-
プロパティの設定
-
設定ファイルの読み込み
-
プロダクトのファイル内にlog4phpの処理を差し込んで使用
※番号1、2 は割愛します。
3 プロパティの設定
設定ファイルの記載方法について(自分はここに苦戦しました)
log4phpを動かすうえで、いくつか値を設定する必要があります。
今回はわかり易そうな iniファイル形式を採用
以下の要件でログを出力します。
- ファイルに追記出力
- ファイルサイズでローテートしたい
- フォーマットを指定したい
- 出力先を指定したい
- エラーレベルは INFO以上を出力する(※レベルについては後述)
上の要件を満たす設定ファイルは以下です。
(# 等でコメントアウト書けるそうですが、自分の環境では外さないと動きませんでした)
log4php.rootLogger = INFO, dest
log4php.appender.dest = LoggerAppenderRollingFile
log4php.appender.dest.file = ログ出力先絶対パス
log4php.appender.dest.append = true
log4php.appender.dest.maxFileSize = 5MB
log4php.appender.dest.maxBackupIndex = 5
log4php.appender.dest.compress = false
log4php.appender.dest.layout = LoggerLayoutPattern
log4php.appender.dest.layout.conversionPattern = "%date{Y-m-d H:i:s.u} %-8level From : [%server{REMOTE_ADDR}] To : [%-20logger] Request : [%request] MSG : [%message]%newline”
上から説明していきます。
log4php.rootLogger
構文 : log4php.rootLogger = エラーレベル, 出力する人の名前
全体のログの管理を担当する人の設定を行う行
この項目にはどのエラーレベルのログを、どの担当者(ファイルアペンダー)に出してもらうかを設定します。
設定しない場合はデフォルトの設定になるそうです。
エラーレベル(上に行くほど高い)
INFOを指定したら、INFO以上が取れます。
- FATAL : これが出たら、アプリが停止します。
- ERROR : 文字通りエラーの情報、
- WARNING : 致命的ではないが、注意が必要な情報、アプリ自体は動く、かもしれない
- INFO : 通常の動作時の情報を記録、たいていこれ。
- DEBUG : 最も詳細な情報を記録、デバッグ目的
- TRACE : DEBUGよりも詳細な情報、トラブルシューティング目的
出力する人の名前
公式ドキュメントにはファイルアペンダーとありました。
要は出力する人の名前です。何でもいいそうです。今回はdestとしました。
この後の設定項目で必要です。
log4php.appender.dest
構文 : log4php.appender.dest = LoggerAppenderFile
destさんがどういう風にログ出力するかを決めます。
以下のいずれかを設定できます。
今回はLoggerAppenderRollingFileを採用
-
LoggerAppenderFile
- ファイルにログを出力する基本的なアペンダー。
- ログファイルには追記される、サイズやバックアップによるローテーションはせず。
-
LoggerAppenderRollingFile
- ローテーションをできるアペンダー。サイズや日付でローテーションできる。
-
maxFileSize
やmaxBackupIndex
などのパラメータで設定が可能。指定したサイズや数に達すると新しいファイルを作成し、古いファイルをバックアップ。
-
LoggerAppenderDailyFile
- ローテーションを日単位で行うアペンダー。毎日ログファイルを新しいものに切り替えます。
-
LoggerAppenderSyslog
- Syslog サーバーにログを送信するためのアペンダー。
-
LoggerAppenderMail
- ログをメールで送信するためのアペンダー。
log4php.appender.dest.file
構文 : log4php.appender.dest.file = /hogehoge/hogehoge2/hogehoge/log/app.log
出力先を指定。絶対パス
ちなみに出力日時をファイル名に付与させたい場合は
%d{YmdHis}のフォーマットのように書くことはできません。
php側で処理を加える必要あり。
log4php.appender.dest.append
構文 : log4php.appender.dest.append = true
追記するかの設定(true かfalse)
log4php.appender.dest.maxFileSize
構文 : log4php.appender.dest.maxFileSize = 5MB
1ファイルの最大サイズを指定
log4php.appender.dest.maxBackupIndex
構文 : log4php.appender.dest.maxBackupIndex = 5
ログファイルを何世代まで持つか
log4php.appender.dest.compress
構文 : log4php.appender.dest.compress = false
指定したファイル容量上限を超える、新しい日付になるなど、
自分で設定したローテート条件が満足され、
新しいファイルを作成する際に古いファイルを圧縮するか否か。
true か false
log4php.appender.dest.layout
構文 log4php.appender.dest.layout = LoggerLayoutPattern
-
LoggerLayoutPattern: パターンに基づいてログの書式を設定します(
%d
,%p
,%c
,%m
,%n
などを使用)。 - LoggerLayoutSimple: 単純な書式のログ出力を提供します。
- LoggerLayoutHtml: HTML 形式でログを出力します。
出力するログ書式について設定。
今回は何時何分にどのアドレスの人が、などまで知りたいため LoggerLayoutPatternを採用
log4php.appender.dest.layout.conversionPattern
構文 : log4php.appender.dest.layout.conversionPattern = "%date{Y-m-d H:i:s.u} %-8level From : [%server{REMOTE_ADDR}] To : [%-20logger] Request : [%request] MSG : [%message]%newline”
ここのフォーマットの書き方はカスタマイズ性が高いです!!!
キリがなさそうので構文例のもののみ紹介します
-
%date{Y-m-d H:i:s.u}
: 日付と時間を指定されたフォーマットで出力。Y
は年、m
は月、d
は日、H
は時、i
は分、s
は秒、u
はマイクロ秒を表。 -
%-8level
: ログレベルを8文字で表示し、左寄せ。 -
%server{}
: スーパーグローバル変数の$_SERVERの値を扱えます。例えば %server{REMOTE_ADDR}なら繋いできた人のIPアドレスなど。
-
**%logger**
: ロガー名(※後述) -
**%request
** : スーパーグローバル変数の $_REQUESTを扱えます -
%message
: ログのメッセージを出力(※後述) -
%newline
: 改行を行います。
%logger と %messageは実際に使うときに指定します。
指定方法は後々出てきます。あともう少しなので頑張って。
4.プロパティファイルの読み込み
<?php
// 公式さんはこうしてました。
// 自分はオートローダがあったのでそっちを使用してます。
include('Logger.php');
//設定ファイルの読み込み
//LOG_CONF_PATHは上で書いたiniファイルの絶対パスで
Logger::configure(LOG_CONF_PATH);
これだけでいいそうです。
5.ログファイルへの出力
<?php
include('Logger.php');
Logger::configure(LOG_CONF_PATH);
$logger = Logger::getLogger(ロガー名)
//上記で出てきたものです。ここで入れた値が %logger として扱えます。
//ログ出力(この()の中が%message として扱えます)
$logger->debug('This is a debug message');
$logger->info('This is an info message');
$logger->warn('This is a warning message');
$logger->error('This is an error message');
$logger->fatal('This is a fatal message');
こんな感じで書くと、ログにはこんな感じで出ます。
2023-12-09 19:24:50.400 INFO From : [繋いできた人のIP] To : [index.php ] Request : [email=hogehoge.com password=hogehoge] MSG : [This is an info message]
2023-12-09 19:24:50.400 WARN From : [繋いできた人のIP] To : [index.php ] Request : [] MSG : [This is a warning message]
2023-12-09 19:24:50.400 ERROR From : [繋いできた人のIP] To : [index.php ] Request : [] MSG : [This is an error message]
2023-12-09 19:24:50.400 FATAL From : [繋いできた人のIP] To : [index.php ] Request : [] MSG : [This is a fatal message]**
多分、これで使えます。
動かなかったら、公式のほうも読んでみてください。
終わりに
出力ファイル名のところに
%d{YmdHis}のフォーマットのように書くことはできません。php側で処理を加える必要あり。
と書きましたが、 LoggerAppenderDailyFile を指定すれば
app_20231209121212.log なんてこともできるらしい。
そっちに変えようかしら。
Discussion