LoginSignup
0
0

Log4php 使用方法(自分用、詳しくは公式サイトへ!!)

Last updated at Posted at 2023-12-09

はじめに

現在、自身が使用しているプロダクトにlog4phpを導入しようとしています

しかし、使い方がわからなかったので調べてみることに。

※極限まで突き詰めるつもりはありません!!

使い方

  1. まずモノをダウンロード

    Apache log4php - Download - Apache log4php

    composer使っても行けるみたいです。

  2. ファイルをプロダクトの任意ディレクトリ配下に解凍展開

  3. プロパティの設定

  4. 設定ファイルの読み込み

  5. プロダクトのファイル内に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
    • ローテーションをできるアペンダー。サイズや日付でローテーションできる。
    • maxFileSizemaxBackupIndex などのパラメータで設定が可能。指定したサイズや数に達すると新しいファイルを作成し、古いファイルをバックアップ。
  • 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 なんてこともできるらしい。

そっちに変えようかしら。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0