Enviar pesquisa
Carregar
Log4j 2 source code reading
•
3 gostaram
•
1,855 visualizações
Go Tanaka
Seguir
Tecnologia
Negócios
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 18
Baixar agora
Baixar para ler offline
Recomendados
Log4j 2 writing
Log4j 2 writing
Go Tanaka
NIO.2を使って簡単ファイル操作
NIO.2を使って簡単ファイル操作
Yuichi Sakuraba
from old Java to modern Java
from old Java to modern Java
心 谷本
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
guestc68147
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
Tusyoshi Matsuzaki
Log4j in 8 slides
Log4j in 8 slides
Tarin Gamberini
CPU
CPU
Go Tanaka
Log4j Logging Mechanism
Log4j Logging Mechanism
Kunal Dabir
Recomendados
Log4j 2 writing
Log4j 2 writing
Go Tanaka
NIO.2を使って簡単ファイル操作
NIO.2を使って簡単ファイル操作
Yuichi Sakuraba
from old Java to modern Java
from old Java to modern Java
心 谷本
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
guestc68147
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
Tusyoshi Matsuzaki
Log4j in 8 slides
Log4j in 8 slides
Tarin Gamberini
CPU
CPU
Go Tanaka
Log4j Logging Mechanism
Log4j Logging Mechanism
Kunal Dabir
DevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJS
Go Tanaka
Jvm internal
Jvm internal
Go Tanaka
Knockout handson
Knockout handson
Go Tanaka
Knockout bindings
Knockout bindings
Go Tanaka
Implement curry
Implement curry
Go Tanaka
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
Go Tanaka
Studying Network #1
Studying Network #1
Go Tanaka
Inside The Java Virtual Machine
Inside The Java Virtual Machine
Go Tanaka
FxUG HTML5
FxUG HTML5
Go Tanaka
Nettyらへん
Nettyらへん
Go Tanaka
T2 reading 20101126
T2 reading 20101126
Go Tanaka
Kanjava20110302
Kanjava20110302
Go Tanaka
GWT♥HTML5
GWT♥HTML5
Go Tanaka
Slim3 Gwt In Action
Slim3 Gwt In Action
Go Tanaka
はじめてのPHP
はじめてのPHP
Go Tanaka
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日
Go Tanaka
Mais conteúdo relacionado
Mais de Go Tanaka
DevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJS
Go Tanaka
Jvm internal
Jvm internal
Go Tanaka
Knockout handson
Knockout handson
Go Tanaka
Knockout bindings
Knockout bindings
Go Tanaka
Implement curry
Implement curry
Go Tanaka
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
Go Tanaka
Studying Network #1
Studying Network #1
Go Tanaka
Inside The Java Virtual Machine
Inside The Java Virtual Machine
Go Tanaka
FxUG HTML5
FxUG HTML5
Go Tanaka
Nettyらへん
Nettyらへん
Go Tanaka
T2 reading 20101126
T2 reading 20101126
Go Tanaka
Kanjava20110302
Kanjava20110302
Go Tanaka
GWT♥HTML5
GWT♥HTML5
Go Tanaka
Slim3 Gwt In Action
Slim3 Gwt In Action
Go Tanaka
はじめてのPHP
はじめてのPHP
Go Tanaka
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日
Go Tanaka
Mais de Go Tanaka
(16)
DevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJS
Jvm internal
Jvm internal
Knockout handson
Knockout handson
Knockout bindings
Knockout bindings
Implement curry
Implement curry
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
Studying Network #1
Studying Network #1
Inside The Java Virtual Machine
Inside The Java Virtual Machine
FxUG HTML5
FxUG HTML5
Nettyらへん
Nettyらへん
T2 reading 20101126
T2 reading 20101126
Kanjava20110302
Kanjava20110302
GWT♥HTML5
GWT♥HTML5
Slim3 Gwt In Action
Slim3 Gwt In Action
はじめてのPHP
はじめてのPHP
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日
Log4j 2 source code reading
1.
Log4Jソースコードリーディング
2012.09.22 (sat) at PLUGRAM, Inc. 12年9月23日日曜日
2.
社内勉強会 Log4J
Log4J ログ出力 専用ライブラリ 何ができるの? ・パッケージでフィルタリング ・ログレベルでフィルタリング ・ログ出力先をカスタマイズ ・ログ出力レイアウトをカスタマイズ COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
3.
社内勉強会 Log4J
つかいかた 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."); } } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
4.
社内勉強会 Log4J
つかいかた <?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> COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
5.
社内勉強会 Log4J
Log4J 2 http://logging.apache.org/log4j/2.x/manual/architecture.html COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
6.
社内勉強会 Log4J
ログ出力までの流れ 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."); } } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
7.
社内勉強会 Log4J
ログ出力までの流れ 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) { LogManager new Main().run(); } public static Logger getLogger(String name) { return factory.getContext(LogManager.class.getName(), null, false).getLogger(name); public void run() { } logger.trace("Entering application."); MyNewApp bar = new MyNewApp(); if (bar.doIt()) { org.apache.logging.log4j.core.LoggerContext logger.error("Just do it."); } logger.trace("Exiting application."); org.apache.logging.log4j.core.Logger } } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
8.
社内勉強会 Log4J
ログ出力までの流れ 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."); } } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
9.
社内勉強会 Log4J
ログ出力までの流れ 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(); AbstractLogger if (bar.doIt()) { logger.error("Just do it."); public void trace(String message) { } if (isEnabled(Level.TRACE, null, message)) { logger.trace("Exiting application."); log(null, FQCN, Level.TRACE, new SimpleMessage(message), null); } } } } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
10.
社内勉強会 Log4J
ログ出力までの流れ AbstractLogger public void trace(String message) { if (isEnabled(Level.TRACE, null, message)) { log(null, FQCN, Level.TRACE, new SimpleMessage(message), null); } } core.Logger @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); } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
11.
社内勉強会 Log4J
ログ出力までの流れ core.Logger @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.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); } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
12.
社内勉強会 Log4J
ログ出力までの流れ 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(); } } } } } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
13.
社内勉強会 Log4J
読んでみよう ・出力レイアウトの設定方法 ・出力先の設定方法 ・パッケージ名でのフィルタリング ・ログレベルでのフィルタリング COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
14.
社内勉強会 Log4J
出力レイアウトの設定方法 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); } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
15.
社内勉強会 Log4J
出力レイアウトの設定方法 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(); } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
16.
社内勉強会 Log4J
出力レイアウトの設定方法(利用してるところ) 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 { core.layout.PatternLayout readLock.unlock(); } } public String formatAs(final LogEvent event) { StringBuilder buf = new StringBuilder(); for (PatternFormatter formatter : formatters) { formatter.format(event, buf); } core.layout.AbstractStringLayout String str = buf.toString(); if (replace != null) { str = replace.format(str); public byte[] format(LogEvent event) { } return encoder.getBytes(formatAs(event)); return config == null ? str : config.getSubst().replace(event, str); } } COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
17.
社内勉強会 Log4J
読んでみよう ・出力レイアウトの設定方法 同じように読んでみよう ・出力先の設定方法 ・パッケージ名でのフィルタリング ・ログレベルでのフィルタリング COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
18.
社内勉強会 Log4J
ありがとうございました COPYRIGHT 2012 PLUGRAM, Inc. 12年9月23日日曜日
Baixar agora