php エディター Zimo は、構成ファイルを使用して Logger をエレガントに構成し、ログ ローテーションを実装する方法を共有します。 Logger は、アプリケーションの実行ステータスを記録して、トラブルシューティングやログの追跡を容易にするために役立つ、一般的に使用されるログ ツールです。 Loggerを利用する場合、ログの形式や出力対象、ログレベルなどを設定ファイルで柔軟に定義したり、ログのローテーションルールを設定したりすることで、ログの自動管理や保存を実現できます。合理的な構成により、より柔軟で効率的なロギングと管理を実現できます。この記事では、構成ファイルを使用して Logger をエレガントに構成し、ログのローテーションをサポートする方法を詳しく紹介します。
test1()
は、公式ドキュメント ngopkg.in/natefinch/lumberjack.v2
で推奨されている丸太の回転および切断ライブラリです。 test2()
は、公式ドキュメントの基本設定に従って yaml を使用して設定を読み取るロガーです。 main関数の実行後、
コンソールの出力:
2023-05-15t08:49:16.555 0800 |info|ロガーのビルドが成功しました: yaml からの設定 | {"app":"jpz"}
ログ ファイル foo.log
:
{"level":"info","ts":1684111756.5545945,"msg":"ロガーが正常に構築されました: lumberjack.logger"}
これら 2 つのログは明らかに異なります。
どちらも、構成ファイル config_log_zap.yaml
を使用してすべての構成を有効にし、lumberjack
がログのローテーションと分割作業を完了できるようにすることをサポートしています。
コンソールとログ ファイルの出力は同じである必要があるため、構成ファイルを介して必要なものをすぐに適用できます。開発中に過去の出力メッセージを追跡して記録する必要があるため、コンソール ファイルとログ ファイルが必要です。
コンソールの出力:
2023-05-15t08:49:16.555 0800 |info|ロガーのビルドが成功しました: yaml からの設定 | {"app":"jpz"}
ログ ファイル foo.log
:
2023-05-15t08:49:16.555 0800 |info|ロガーのビルドが成功しました: yaml からの設定 | {"app":"jpz"}
上記 2 つの要件を満たすために、test1()
と test2()
を 1 つの関数 test0()
に結合するにはどうすればよいですか?
助けてください。私はこれに長い間取り組んできました。
main.go
リーリーconfig_log_zap.yaml
package main import ( "gopkg.in/yaml.v3" "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) func test1() { // lumberjack.logger is already safe for concurrent use, so we don't need to // lock it. w := zapcore.addsync(&lumberjack.logger{ filename: "./foo.log", maxsize: 500, // megabytes maxbackups: 3, maxage: 28, // days }) core := zapcore.newcore( zapcore.newjsonencoder(zap.newproductionencoderconfig()), w, zap.infolevel, ) logger := zap.new(core) logger.info("logger construction succeeded:lumberjack.logger") } func test2() { var cfg zap.config yamlfile, _ := os.readfile("./config_log_zap.yaml") if err := yaml.unmarshal(yamlfile, &cfg); err != nil { panic(err) } logger := zap.must(cfg.build()) defer logger.sync() logger.info("logger construction succeeded:config from yaml") } func main() { test1() test2() }
zap.registersinkを使用して、lumberjack
ロガーを新しいシンクとして登録します:
そして、構成ファイルを変更して、outputpaths
を次のように設定します:
以上が構成ファイルを使用して、ログのローテーションをサポートしながら Logger をエレガントに構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。