Java 1.4 で標準ライブラリにロギングAPIが搭載されたけど、それでもいまだに log4j のほうが人気があるような気がしてならない。。。
といってもJDK標準ロギングAPIのほうを使っているライブラリもあるだろうし、そのへんを制御するためにちょっと調べてみた。

1.8 構成ファイル

ロギング構成は、起動時に読み取られるロギング構成ファイルで初期化することができます。 このロギング構成ファイルは、標準の java.util.Properties 形式です。

また、初期化プロパティの読み込みに使用するクラスを指定してロギング構成を初期化することもできます。 この機構を使うと、LDAP や JDBC など、任意のソースから構成データを読み取ることもできます。 詳細は、「LogManager API 仕様」を参照してください。

Java TM ロギングの概要

『構成ファイル』というロギングの設定ファイルがあるらしい。

● Java実行環境の起動オプションにログの構成ファイル名を与える

 java.util.logging.config.fileシステムプロパティでログの構成ファイル名を直接指定できます。

● Javaアプリケーション起動ツール

  Javaアプリケーション起動ツール(いわゆるjavaコマンド)に「-Djava.util.logging.config.file=myfile」のようにオプションを追加することにより、ログ構成ファイルを直接指定できます(参考)。

● Java実行環境のプロパティファイルを変更する

 Java SE(J2SE) 5.0を例に取ると、Java実行環境のディレクトリ以下にある「jre\lib」サブディレクトリに「logging.properties」というファイルがあります。このファイルを直接編集することにより、 LogManager.getLogManager().readConfiguration()を呼び出す手順を踏むことなく、設定値を変更できます。

 ただし、この変更方法だと該当するJava仮想マシンのすべてに設定内容が反映される点に注意が必要です。

入門から実践までJavaで学べる「ログ」の常識 (3/4) - @IT

Debian GNU/Linux 4.0 の場合は /usr/lib/jvm/java-1.5.0-sun/jre/lib/logging.properties にあった。

その中身はこんな感じ。


############################################################
#  	Default Logging Configuration File
#
# You can use a different file by specifying a filename
# with the java.util.logging.config.file system property.  
# For example java -Djava.util.logging.config.file=myfile
############################################################
 
############################################################
#  	Global properties
############################################################
 
# "handlers" specifies a comma separated list of log Handler 
# classes.  These handlers will be installed during VM startup.
# Note that these classes must be on the system classpath.
# By default we only configure a ConsoleHandler, which will only
# show messages at the INFO and above levels.
handlers= java.util.logging.ConsoleHandler
 
# To also add the FileHandler, use the following line instead.
#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
 
# Default global logging level.
# This specifies which kinds of events are logged across
# all loggers.  For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level= INFO
 
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
 
# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
 
# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
 
 
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
 
# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
com.xyz.foo.level = SEVERE

この構成ファイルを修正すると、他のJavaで書かれたプログラムにも影響してしまうのでそれはパス。

新しく logging.properties という構成ファイルをつくって、何もログ出力しないように設定してみる。

新しい logging.properties の中身。


.level= OFF

ログレベルの設定については API リファレンスの Level クラスを参考にする。

レベルは降順で次のとおりです。

* SEVERE (最高値)
* WARNING
* INFO
* CONFIG
* FINE
* FINER
* FINEST (最低値)

これら以外に、ロギングをオフするために使用されるレベル OFF、およびすべてのメッセージのロギングを有効にするために使用されるレベル ALL があります。

Sun 以外が、Level をサブクラス化することによりログレベルを追加定義することが可能です。このような場合、サブクラスは一意の整数値レベルを選択し、適切な readResolve メソッドを定義することにより、直列化を通して Object が一意のプロパティを保持できるように注意する必要があります。

Level (Java 2 プラットフォーム SE v1.4.0)

その他、構成ファイルの設定については API リファレンスの LogManager クラスのページが参考になる。
LogManager (Java 2 プラットフォーム SE v1.4.0)

新しく作った構成ファイル logging.properties を適用するには、起動時に -Djava.util.logging.config.file パラメータに構成ファイルのパスを指定する。

適用例。


java -classpath hoge.jar -Djava.util.logging.config.file=/home/hoge/logging.properties HogeMain

Ref.
-Java TM ロギング API
-java.util.logging (Java 2 プラットフォーム SE v1.4.0)

tags: zlashdot Java Java

Posted by NI-Lab. (@nilab)