LoginSignup
26
18

More than 1 year has passed since last update.

Web系の言語で使われている Logger のログレベルをまとめてみた

Last updated at Posted at 2018-05-03

概要

Logger のログレベルって、言語に関係なく統一されているべきだと個人的に思うのですが、実際にはそんなに揃っていなくて、違う言語の Logger を使うときに混乱するので、まとめました。
自分は Web 系の人間なので、 Web 系の各言語のデファクトスタンダードな感じの Logger を対象にしました。

結論

PHP は Syslog系。
それ以外は Log4j系。
後述しますが、Log4j系には、Log4j系とPython系で2種類あります。

調べた Logger と、それぞれの系列

スタンダードみたいなもの

Syslog は、全言語・環境の中で最も一般的なインターフェースだと思うので、とりあえず入れました。

Apache Log4j は、log4r (Ruby) とか log4js とか log4php みたいにいろいろな言語に同様の実装がありますし、現在でも(おそらく)広く使われているので、入れました。

多くの Logger は、この2つのどちらかとほぼ同じインターフェースでした。なので、このあとに言語ごとのよく使われている(と私が思っている) Logger を挙げますが、 Syslog系 or Log4j系 も一緒に書きます。

PHP

PHP 界隈では、PSR-3 Logger Interface(PHP)という標準があります。
どのフレームワーク・ライブラリも、これに準拠したインターフェースを実装しているようです。

Ruby

標準ライブラリに、 Logger と Web サーブレット向け Logger があります。
どのフレームワークも、それらをそのまま使っているようです。

Ruby Gems は自信ないです。 gem コマンドの Logger (Reporter かな?)でなに使ってるのかすぐわからなかったので、知ってる人いたらソースコードの該当箇所を教えてください。

Python

標準ライブラリに logging モジュールがあります。
どのフレームワークも、それをそのまま使っているようです。

JavaScript / TypeScript

Logger / LogLevel という観点だと、標準らしいものはありません。

JavaScript 界隈は特に統制が取れていなくてカオスなので、みんな大好き console の標準と、私が把握してる限りでの有名所を比較対象にしました。

Java

Java 界隈の Logger の事情は "とてもめんどくさい歴史的経緯" があるようです。『Javaのログ出力: 道具と考え方』あたりを参考にしましょう。

表にまとめて、対比してみる

Syslog か Log4j に近い感じのやつ

Log Levels Syslog Log4j PHP Ruby WEBrick Python pino winston Bunyan JCL Logback
Emergency
FATAL
ERROR
Alert
Critical
Error
Warning(WARN)
Notice
Informational(INFO)
Debug
TRACE
  • Camel ケースは Syslog にあるもの。
  • PASCAL ケースは Log4j にあるもの。

Pytyon は、 CRITICAL > ERRORのようです。 CRITICAL が FATAL だと思えば、 Log4j 系になります。

winston は Syslog なインターフェースと、 npm-logger なインターフェースで選べるけれど、デフォルトは Syslog。

独自路線を突き進むやつ

Syslog と Log4j を比較用で入れています。

Log Levels Syslog Log4j java util logging Console npm yarn
Emergency
FATAL
ERROR
Alert
severe
Critical
Error
Warning(WARN)
Notice
http
Informational(INFO)
Debug
verbose
config
TRACE
fine
finer
finest
log
silly
success
  • Camel ケースは Syslog にあるもの
  • PASCAL ケースは Log4j にあるもの
  • 小文字のものは 各ライブラリが独自に実装してるもの

特に java util logging が謎すぎて、どうやって使えばいいのか見当もつかないですね。

まとめ

PHP 界隈は、 PSR-3 Logger Interface(PHP)のおかげで Syslog 系がデファクトスタンダードとなっています。
それ以外では、 Log4j系がほとんどでした。

私は PHP 界隈の人間なので、 JavaScript でも Syslog 系を使いたいので winston を使っていますが、界隈的には Log4j系のライブラリのほうがスタンダードのようです。 界隈的にも Logger の中では winston がダントツっぽいので、 Syslog 系のほうが勢力ありそうです。

TypeScript は、Deno の標準ライブラリにある log が Log4j系 です。軽くコードを見た感じだと、Ruby や Python のように平和な世界が訪れそうな感じがしました。

Ruby と Python のような、処理系が標準で優秀な Logger ライブラリを提供していると、最初から統一されて平和です。

Java 界隈は、パット見では Logback をバックエンドにして SLF4J を使っていることが多いようです。間違っても java util logging は使ってはいけません。

26
18
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
26
18