ログ出力(Java標準ロガー)

Java標準APIのロガーは、1.4から使えるようになった。

// 当クラスと同じパッケージ内からプロパティファイル読み込み
try {
	LogManager.getLogManager().readConfiguration(this.getClass().getResourceAsStream("logging.properties"));
} catch (SecurityException e) {
	throw new RuntimeException(e);
} catch (IOException e) {
	throw new RuntimeException(e);
}

// ログ出力
Logger logger = Logger.getLogger(JavaLog01.class.getName());
logger.finest("FINESTメッセージです。");
logger.finer("FINERメッセージです。");
logger.fine("FINEメッセージです。");
logger.config("CONFIGメッセージです。");
logger.info("INFOメッセージです。");
logger.warning("WARNINGメッセージです。");
logger.severe("SEVEREメッセージです。");

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.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# Example to customize the SimpleFormatter output format
# to print one-line log message like this:
#     <level>: <log message> [<date/time>]
#
#-----------------------------------------------------------
# Pleiades Custom: Enabled one line format.
#-----------------------------------------------------------
java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n
org.apache.tomcat.util.digester.Digester.level = SEVERE

############################################################
# 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
com.tryjava.level = ALL

参考

ログ出力(Apache Log4j)

ログ出力する。

// Log4j2では、Logger#getLoggerメソッドがなくなった。
Logger logger = LogManager.getLogger(Log4j01.class);

logger.trace("TRACEログです。");
logger.debug("DEBUGログです。");
logger.info("INFOログです。");
logger.warn("WARNログです。");
logger.error("ERRORログです。");
logger.fatal("FATALログです。");

// Log4j2では、パラメータの埋め込みが使えるようになった。
logger.info("Hello, {}!", "World");

Apache Log4j 1.2で使用するlog4j.properties

# Log4j 1.2 プロパティファイル

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=INFO, A1, FILE1

# A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss.SSS} [%t] %-5p %c{1} - %m%n

# FILE1
log4j.appender.FILE1=org.apache.log4j.RollingFileAppender
log4j.appender.FILE1.File=./work/log4j.log
log4j.appender.FILE1.MaxFileSize=100KB
log4j.appender.FILE1.MaxBackupIndex=3
log4j.appender.FILE1.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN
log4j.logger.com.tryjava=ALL

Apache Log4j 2.xで使用するlog4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
	<Appenders>
		<!-- コンソール出力 -->
		<Console name="Console" target="SYSTEM_OUT">
			<!-- <PatternLayout pattern="%d{yyy/MM/dd HH:mm:ss.SSS} [%t] %-5level
				%logger{36} - %msg%n"/> <PatternLayout pattern="%d{yyy/MM/dd HH:mm:ss.SSS}
				%-5level - %msg%n" /> -->
			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{1} - %msg%n" />
		</Console>
		<!-- ファイル出力 -->
		<RollingFile name="File" fileName="./work/log4j.log"
			filePattern="./work/log4j-%d{yyyy-MM-dd}-%i.zip">
			<PatternLayout
				pattern="%d{yyy/MM/dd HH:mm:ss.SSS} [%t] %-5level %logger - %msg%n" />
			<Policies>
				<!-- JVM開始時にログファイル切り替え -->
				<OnStartupTriggeringPolicy />
				<!-- ファイルサイズで切り替え -->
				<SizeBasedTriggeringPolicy size="20MB" />
				<!-- 日付が変わったときに切り替え -->
				<TimeBasedTriggeringPolicy />
			</Policies>
			<DefaultRolloverStrategy max="3" />
		</RollingFile>
	</Appenders>
	<Loggers>
		<Root level="INFO">
			<AppenderRef ref="Console" />
		</Root>
		<Logger name="com.tryjava" level="ALL" additivity="false">
			<AppenderRef ref="Console" />
			<AppenderRef ref="File" />
		</Logger>
	</Loggers>
</Configuration>

Apache Log4j 1.2 の参考

Apache Log4j 2.x の参考

ログAPIラッパー(Apache Commons Logging)

Apache Commons Loggingは、汎用インターフェースを提供するのみ。 実際のログ出力は、Log4jやJava標準APIなどを使用する。

Apache Commons Loggingが使用するログ実装は、次の優先順序で選択される。

  1. commons-logging.propertiesファイルがあれば、そのファイルで指定されるログ実装を使う。
  2. システムプロパティorg.apache.commons.logging.Logが定義されていれば、その定義に従う。
  3. クラスパスにLog4jが見つかれば、Log4jを使う。
  4. Java1.4以上を使用していれば、Java標準のロガーを使う。
  5. Apache Commons Loggingの簡単なログ実装を使う。

Log4jで提供しているlog4j-jclをクラスパスに通すと、Log4j2も使用できるらしい。

Log log = LogFactory.getLog(this.getClass());
log.trace("TRACEログです。");
log.debug("DEBUGログです。");
log.info("INFOログです。");
log.warn("WARNログです。");
log.error("ERRORログです。");
log.fatal("FATALログです。");

参考