log4j 2 source code reading
Post on 11-May-2015
1.113 Views
Preview:
TRANSCRIPT
Log4Jソースコードリーディング2012.09.22 (sat) at PLUGRAM, Inc.
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
Log4J
“ログ出力”専用ライブラリ
何ができるの?・パッケージでフィルタリング
・ログレベルでフィルタリング
・ログ出力先をカスタマイズ
・ログ出力レイアウトをカスタマイズ
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
つかいかたpackage com.plugram.log4j.foo;
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
import com.plugram.log4j.bar.MyNewApp;
public class Main {
static Logger logger = LogManager.getLogger(Main.class.getName());
public static void main(String[] args) { new Main().run(); }
public void run() { logger.trace("Entering application."); MyNewApp app = new MyNewApp(); if (app.doIt()) { logger.error("Just do it."); } logger.trace("Exiting application."); }
}
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
つかいかた<?xml version="1.0" encoding="UTF-8"?><configuration status="off"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </appenders> <loggers> <!-- <logger name="com.plugram.log4j.foo" level="error"> <appender-ref ref="Console"/> </logger> <logger name="com.plugram.log4j.bar" level="error"> <appender-ref ref="Console"/> </logger> --> <root level="trace"> <appender-ref ref="Console"/> </root> </loggers></configuration>
パッケージ名でフィルタリング
ログレベルでフィルタリング
出力レイアウト出力先
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
Log4J 2
http://logging.apache.org/log4j/2.x/manual/architecture.html
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
ログ出力までの流れ
package com.plugram.log4j.foo;
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
import com.plugram.log4j.bar.MyNewApp;
public class Main {
static Logger logger = LogManager.getLogger(Main.class.getName());
public static void main(String[] args) { new Main().run(); }
public void run() { logger.trace("Entering application."); MyNewApp bar = new MyNewApp(); if (bar.doIt()) { logger.error("Just do it."); } logger.trace("Exiting application."); }
}
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
package com.plugram.log4j.foo;
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
import com.plugram.log4j.bar.MyNewApp;
public class Main {
static Logger logger = LogManager.getLogger(Main.class.getName());
public static void main(String[] args) { new Main().run(); }
public void run() { logger.trace("Entering application."); MyNewApp bar = new MyNewApp(); if (bar.doIt()) { logger.error("Just do it."); } logger.trace("Exiting application."); }
}
public static Logger getLogger(String name) { return factory.getContext(LogManager.class.getName(), null, false).getLogger(name);}
LogManager
org.apache.logging.log4j.core.LoggerContext
org.apache.logging.log4j.core.Logger
ログ出力までの流れ
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
package com.plugram.log4j.foo;
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
import com.plugram.log4j.bar.MyNewApp;
public class Main {
static Logger logger = LogManager.getLogger(Main.class.getName());
public static void main(String[] args) { new Main().run(); }
public void run() { logger.trace("Entering application."); MyNewApp bar = new MyNewApp(); if (bar.doIt()) { logger.error("Just do it."); } logger.trace("Exiting application."); }
}
ログ出力までの流れ
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
package com.plugram.log4j.foo;
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
import com.plugram.log4j.bar.MyNewApp;
public class Main {
static Logger logger = LogManager.getLogger(Main.class.getName());
public static void main(String[] args) { new Main().run(); }
public void run() { logger.trace("Entering application."); MyNewApp bar = new MyNewApp(); if (bar.doIt()) { logger.error("Just do it."); } logger.trace("Exiting application."); }
}
public void trace(String message) { if (isEnabled(Level.TRACE, null, message)) { log(null, FQCN, Level.TRACE, new SimpleMessage(message), null); }}
AbstractLogger
ログ出力までの流れ
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
public void trace(String message) { if (isEnabled(Level.TRACE, null, message)) { log(null, FQCN, Level.TRACE, new SimpleMessage(message), null); }}
AbstractLogger
@Override public void log(Marker marker, String fqcn, Level level, Message data, Throwable t) { if (data == null) { data = new SimpleMessage(""); } config.config.getConfigurationMonitor().checkConfiguration(); config.loggerConfig.log(name, marker, fqcn, level, data, t); }
core.Logger
ログ出力までの流れ
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
@Override public void log(Marker marker, String fqcn, Level level, Message data, Throwable t) { if (data == null) { data = new SimpleMessage(""); } config.config.getConfigurationMonitor().checkConfiguration(); config.loggerConfig.log(name, marker, fqcn, level, data, t); }
core.Logger
ログ出力までの流れ
core.LoggerConfig
public void log(String loggerName, Marker marker, String fqcn, Level level, Message data, Throwable t) { LogEvent event = logEventFactory.createEvent(loggerName, marker, fqcn, level, data, t); log(event); }
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
ログ出力までの流れ
core.LoggerConfig
public void log(LogEvent event) {
counter.incrementAndGet(); try { if (isFiltered(event)) { return; }
callAppenders(event);
if (additive && parent != null) { parent.log(event); } } finally { if (counter.decrementAndGet() == 0) { synchronized (this) { if (shutdown) { notifyAll(); } }
} } }
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
読んでみよう
・出力レイアウトの設定方法
・出力先の設定方法
・パッケージ名でのフィルタリング
・ログレベルでのフィルタリング
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
出力レイアウトの設定方法
core.LoggerContext
private volatile Configuration config = new DefaultConfiguration();
core.DefaultConfiguration
public DefaultConfiguration() {
setName(DEFAULT_NAME); Layout layout = PatternLayout.createLayout("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n", null, null, null); Appender appender = ConsoleAppender.createAppender(layout, null, "SYSTEM_OUT", "Console", "true"); addAppender(appender); LoggerConfig root = getRootLogger(); root.addAppender(appender, null, null);
String l = System.getProperty(DEFAULT_LEVEL); Level level = (l != null && Level.valueOf(l) != null) ? Level.valueOf(l) : Level.ERROR; root.setLevel(level); }
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
出力レイアウトの設定方法core.layout.PatternLayout @PluginFactory public static PatternLayout createLayout(@PluginAttr("pattern") String pattern, @PluginConfiguration Configuration config, @PluginElement("replace") RegexReplacement replace, @PluginAttr("charset") String charset) { Charset c = Charset.isSupported("UTF-8") ? Charset.forName("UTF-8") : Charset.defaultCharset(); if (charset != null) { if (Charset.isSupported(charset)) { c = Charset.forName(charset); } else { LOGGER.error("Charset " + charset + " is not supported for layout, using " + c.displayName()); } } return new PatternLayout(config, replace, pattern == null ? DEFAULT_CONVERSION_PATTERN : pattern, c); }
private PatternLayout(Configuration config, final RegexReplacement replace, final String pattern, final Charset charset) { super(charset); this.replace = replace; this.conversionPattern = pattern; this.config = config; PatternParser parser = createPatternParser(config); formatters = parser.parse((pattern == null) ? DEFAULT_CONVERSION_PATTERN : pattern); handlesExceptions = parser.handlesExceptions(); }
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
出力レイアウトの設定方法(利用してるところ)
core.appender.OutputStreamAppender
public void append(LogEvent event) { readLock.lock(); try { manager.write(getLayout().format(event)); if (this.immediateFlush) { manager.flush(); } } catch (AppenderRuntimeException ex) { error("Unable to write to stream " + manager.getName() + " for appender " + getName()); throw ex; } finally { readLock.unlock(); } }
public byte[] format(LogEvent event) { return encoder.getBytes(formatAs(event)); }
core.layout.AbstractStringLayout
core.layout.PatternLayout
public String formatAs(final LogEvent event) { StringBuilder buf = new StringBuilder(); for (PatternFormatter formatter : formatters) { formatter.format(event, buf); } String str = buf.toString(); if (replace != null) { str = replace.format(str); } return config == null ? str : config.getSubst().replace(event, str); }
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
読んでみよう
・出力レイアウトの設定方法
・出力先の設定方法
・パッケージ名でのフィルタリング
・ログレベルでのフィルタリング
同じように読んでみよう
12年9月23日日曜日
社内勉強会 Log4J
COPYRIGHT 2012 PLUGRAM, Inc.
ありがとうございました
12年9月23日日曜日
top related