Log4Jソースコードリーディング                ライティング                 2012.10.06 (sat) at PLUGRAM, Inc.12年10月7日日曜日
社内勉強会 Log4J    Log4Jライティング    今日やりたいこと                        ログレベルでフィルタリングしたい              COPYRIGHT 2012 PLUGRAM, Inc.12...
社内勉強会 Log4J    Log4Jライティング                                             まずは 前回のおさらい              COPYRIGHT 2012 PLUGRAM, In...
社内勉強会 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    主な登場人物                                                  LogManager                                         ...
社内勉強会 Log4J    LoggerContext      ・起動ポイント      ・設定とかロガーとか持ってる                   private volatile Configuration config = ne...
社内勉強会 Log4J    LogManager     ・こいつが持ってるFactory経由でLoggerを呼び出す         private static final String LOGGER_CONTEXT_FACTORY = ...
社内勉強会 Log4J    Configuration      ・Logger(LoggerConfig)、Appenderを持ってる      ・あとはプラグインとかリスナーとか              Configurationクラスはイン...
社内勉強会 Log4J    Logger      ・このクラス経由でログ出力を行う       実際の処理はLoggerConfigに委譲              COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
社内勉強会 Log4J    今日やりたいこと                       ログレベルでフィルタリングしたい              COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
社内勉強会 Log4J    ログレベルでフィルタリング         org.apache.logging.log4j.core.config.AppenderControl               /**               ...
社内勉強会 Log4J    ログレベルでフィルタリング     org.apache.logging.log4j.core.config.LoggerConfig         /**           * Add an Appender...
社内勉強会 Log4J    書くときの注意     ・どういった意図を持ってクラス設計を行っているか      →各クラスの責務はなにか      →パッケージ分けのルール      →どこからPlugin化しているか     ・JDK5で入...
社内勉強会 Log4J    書くときの注意     ・テストも書こう      →TDD(テスト駆動開発)で書いてみよう      →Mockライブラリ使おう      →Eclipse使ってるならQuick JUnit Plugin    ...
社内勉強会 Log4J    書くときの注意     ・書いたコードはGitHubにアップすること      →Gitは常識レベルとして知っておくと便利      →他の人のコードでバグなどがあったらissue登録      →いきなりプルリク...
社内勉強会 Log4J                                     ありがとうございました              COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
Upcoming SlideShare
Loading in...5
×

Log4j 2 writing

945

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
945
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Log4j 2 writing

  1. 1. Log4Jソースコードリーディング ライティング 2012.10.06 (sat) at PLUGRAM, Inc.12年10月7日日曜日
  2. 2. 社内勉強会 Log4J Log4Jライティング 今日やりたいこと ログレベルでフィルタリングしたい COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  3. 3. 社内勉強会 Log4J Log4Jライティング まずは 前回のおさらい COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  4. 4. 社内勉強会 Log4J Log4J 2 http://logging.apache.org/log4j/2.x/manual/architecture.html COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  5. 5. 社内勉強会 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年10月7日日曜日
  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) { 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年10月7日日曜日
  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) { 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年10月7日日曜日
  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(); 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年10月7日日曜日
  9. 9. 社内勉強会 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); } org.apache.logging.log4j.core.Logger$PrivateConfig COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  10. 10. 社内勉強会 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年10月7日日曜日
  11. 11. 社内勉強会 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年10月7日日曜日
  12. 12. 社内勉強会 Log4J 主な登場人物 LogManager Logger LogContext Configuration とゆかいな仲間たち(関連クラス) AbstractLogger は Logger の親クラス LoggerConfig は Logger の処理を委譲してる COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  13. 13. 社内勉強会 Log4J LoggerContext ・起動ポイント ・設定とかロガーとか持ってる private volatile Configuration config = new DefaultConfiguration(); private final ConcurrentMap<String, Logger> loggers = new ConcurrentHashMap<String, Logger>(); COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  14. 14. 社内勉強会 Log4J LogManager ・こいつが持ってるFactory経由でLoggerを呼び出す private static final String LOGGER_CONTEXT_FACTORY = "LoggerContextFactory"; クラス名から設定できるようにしておけばデフォルトのFactoryクラスも変えられる COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  15. 15. 社内勉強会 Log4J Configuration ・Logger(LoggerConfig)、Appenderを持ってる ・あとはプラグインとかリスナーとか Configurationクラスはインターフェースなので BaseConfigurationクラスを参考に・・・ →自分でConfiguration作るときはこれを拡張すればよい COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  16. 16. 社内勉強会 Log4J Logger ・このクラス経由でログ出力を行う  実際の処理はLoggerConfigに委譲 COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  17. 17. 社内勉強会 Log4J 今日やりたいこと ログレベルでフィルタリングしたい COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  18. 18. 社内勉強会 Log4J ログレベルでフィルタリング org.apache.logging.log4j.core.config.AppenderControl /** * Call the appender. * @param event The event to process. */ public void callAppender(LogEvent event) { ・・・ if (level != null) { if (intLevel < event.getLevel().intLevel()) { return; } } ・・・ try { ・・・ try { appender.append(event); } catch (RuntimeException ex) { ・・・ } } } COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  19. 19. 社内勉強会 Log4J ログレベルでフィルタリング org.apache.logging.log4j.core.config.LoggerConfig /** * Add an Appender to the LoggerConfig. * @param appender The Appender to add. * @param level The Level to use. * @param filter A Filter for the Appender reference. */ public void addAppender(Appender appender, Level level, Filter filter) { appenders.put(appender.getName(), new AppenderControl(appender, level, filter)); } COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  20. 20. 社内勉強会 Log4J 書くときの注意 ・どういった意図を持ってクラス設計を行っているか  →各クラスの責務はなにか  →パッケージ分けのルール  →どこからPlugin化しているか ・JDK5で入ったjava.util.concurrentを使っているところ  →なぜそのクラスを使っているか  → synchronizedやvolatileとはどう違う? COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  21. 21. 社内勉強会 Log4J 書くときの注意 ・テストも書こう  →TDD(テスト駆動開発)で書いてみよう  →Mockライブラリ使おう  →Eclipse使ってるならQuick JUnit Plugin ・必要なライブラリはMaven(Gradle)で管理してね  → 使い方は説明します  → Jenkins使ってたら連携してもいいよ COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  22. 22. 社内勉強会 Log4J 書くときの注意 ・書いたコードはGitHubにアップすること  →Gitは常識レベルとして知っておくと便利  →他の人のコードでバグなどがあったらissue登録  →いきなりプルリクエストしてもおk COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  23. 23. 社内勉強会 Log4J ありがとうございました COPYRIGHT 2012 PLUGRAM, Inc.12年10月7日日曜日
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×