0
Log4Jソースコードリーディング                 2012.09.22 (sat) at PLUGRAM, Inc.12年9月23日日曜日
社内勉強会 Log4J    Log4J          ログ出力 専用ライブラリ         何ができるの?                      ・パッケージでフィルタリング                      ・ログレベル...
社内勉強会 Log4J    つかいかた                            package com.plugram.log4j.foo;                            import org.apach...
社内勉強会 Log4J    つかいかた            <?xml version="1.0" encoding="UTF-8"?>            <configuration status="off">            ...
社内勉強会 Log4J    Log4J 2                                             http://logging.apache.org/log4j/2.x/manual/architecture...
社内勉強会 Log4J    ログ出力までの流れ                            package com.plugram.log4j.foo;                            import org.a...
社内勉強会 Log4J    ログ出力までの流れ                            package com.plugram.log4j.foo;                            import org.a...
社内勉強会 Log4J    ログ出力までの流れ                            package com.plugram.log4j.foo;                            import org.a...
社内勉強会 Log4J    ログ出力までの流れ                            package com.plugram.log4j.foo;                            import org.a...
社内勉強会 Log4J    ログ出力までの流れ                          AbstractLogger                                public void trace(String m...
社内勉強会 Log4J    ログ出力までの流れ                   core.Logger                        @Override                        public void...
社内勉強会 Log4J    ログ出力までの流れ                                             core.LoggerConfig                                     ...
社内勉強会 Log4J    読んでみよう                             ・出力レイアウトの設定方法                             ・出力先の設定方法                     ...
社内勉強会 Log4J    出力レイアウトの設定方法                             core.LoggerContext                                     private vol...
社内勉強会 Log4J    出力レイアウトの設定方法               core.layout.PatternLayout                      @PluginFactory                   ...
社内勉強会 Log4J    出力レイアウトの設定方法(利用してるところ)              core.appender.OutputStreamAppender                        public void a...
社内勉強会 Log4J    読んでみよう                             ・出力レイアウトの設定方法                                             同じように読んでみよう   ...
社内勉強会 Log4J                                             ありがとうございました              COPYRIGHT 2012 PLUGRAM, Inc.12年9月23日日曜日
Upcoming SlideShare
Loading in...5
×

Log4j 2 source code reading

1,171

Published on

Published in: Technology, Business
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,171
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
13
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Log4j 2 source code reading"

  1. 1. Log4Jソースコードリーディング 2012.09.22 (sat) at PLUGRAM, Inc.12年9月23日日曜日
  2. 2. 社内勉強会 Log4J Log4J ログ出力 専用ライブラリ 何ができるの? ・パッケージでフィルタリング ・ログレベルでフィルタリング ・ログ出力先をカスタマイズ ・ログ出力レイアウトをカスタマイズ COPYRIGHT 2012 PLUGRAM, Inc.12年9月23日日曜日
  3. 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. 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. 5. 社内勉強会 Log4J Log4J 2 http://logging.apache.org/log4j/2.x/manual/architecture.html COPYRIGHT 2012 PLUGRAM, Inc.12年9月23日日曜日
  6. 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. 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. 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. 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. 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. 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. 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. 13. 社内勉強会 Log4J 読んでみよう ・出力レイアウトの設定方法 ・出力先の設定方法 ・パッケージ名でのフィルタリング ・ログレベルでのフィルタリング COPYRIGHT 2012 PLUGRAM, Inc.12年9月23日日曜日
  14. 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. 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. 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. 17. 社内勉強会 Log4J 読んでみよう ・出力レイアウトの設定方法 同じように読んでみよう ・出力先の設定方法 ・パッケージ名でのフィルタリング ・ログレベルでのフィルタリング COPYRIGHT 2012 PLUGRAM, Inc.12年9月23日日曜日
  18. 18. 社内勉強会 Log4J ありがとうございました COPYRIGHT 2012 PLUGRAM, Inc.12年9月23日日曜日
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×