SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
Log4Jソースコードリーディング
                 2012.09.22 (sat) at PLUGRAM, Inc.




12年9月23日日曜日
社内勉強会 Log4J




    Log4J
          ログ出力 専用ライブラリ

         何ができるの?
                      ・パッケージでフィルタリング

                      ・ログレベルでフィルタリング

                      ・ログ出力先をカスタマイズ

                      ・ログ出力レイアウトをカスタマイズ
              COPYRIGHT 2012 PLUGRAM, Inc.




12年9月23日日曜日
社内勉強会 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日日曜日
社内勉強会 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日日曜日
社内勉強会 Log4J




    Log4J 2




                                             http://logging.apache.org/log4j/2.x/manual/architecture.html


              COPYRIGHT 2012 PLUGRAM, Inc.




12年9月23日日曜日
社内勉強会 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日日曜日
社内勉強会 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日日曜日
社内勉強会 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日日曜日
社内勉強会 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日日曜日
社内勉強会 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日日曜日
社内勉強会 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日日曜日
社内勉強会 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日日曜日
社内勉強会 Log4J




    読んでみよう


                             ・出力レイアウトの設定方法


                             ・出力先の設定方法


                             ・パッケージ名でのフィルタリング


                             ・ログレベルでのフィルタリング


              COPYRIGHT 2012 PLUGRAM, Inc.




12年9月23日日曜日
社内勉強会 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日日曜日
社内勉強会 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日日曜日
社内勉強会 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日日曜日
社内勉強会 Log4J




    読んでみよう


                             ・出力レイアウトの設定方法
                                             同じように読んでみよう


                             ・出力先の設定方法


                             ・パッケージ名でのフィルタリング


                             ・ログレベルでのフィルタリング


              COPYRIGHT 2012 PLUGRAM, Inc.




12年9月23日日曜日
社内勉強会 Log4J




                                             ありがとうございました




              COPYRIGHT 2012 PLUGRAM, Inc.




12年9月23日日曜日

Mais conteúdo relacionado

Mais de Go Tanaka

DevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJSDevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJSGo Tanaka
 
Jvm internal
Jvm internalJvm internal
Jvm internalGo Tanaka
 
Knockout handson
Knockout handsonKnockout handson
Knockout handsonGo Tanaka
 
Knockout bindings
Knockout bindingsKnockout bindings
Knockout bindingsGo Tanaka
 
Implement curry
Implement curryImplement curry
Implement curryGo Tanaka
 
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012Go Tanaka
 
Studying Network #1
Studying Network #1Studying Network #1
Studying Network #1Go Tanaka
 
Inside The Java Virtual Machine
Inside The Java Virtual MachineInside The Java Virtual Machine
Inside The Java Virtual MachineGo Tanaka
 
Nettyらへん
NettyらへんNettyらへん
NettyらへんGo Tanaka
 
T2 reading 20101126
T2 reading 20101126T2 reading 20101126
T2 reading 20101126Go Tanaka
 
Kanjava20110302
Kanjava20110302Kanjava20110302
Kanjava20110302Go Tanaka
 
Slim3 Gwt In Action
Slim3 Gwt In ActionSlim3 Gwt In Action
Slim3 Gwt In ActionGo Tanaka
 
はじめてのPHP
はじめてのPHPはじめてのPHP
はじめてのPHPGo Tanaka
 
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日Go Tanaka
 

Mais de Go Tanaka (16)

DevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJSDevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJS
 
Jvm internal
Jvm internalJvm internal
Jvm internal
 
Knockout handson
Knockout handsonKnockout handson
Knockout handson
 
Knockout bindings
Knockout bindingsKnockout bindings
Knockout bindings
 
Implement curry
Implement curryImplement curry
Implement curry
 
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
 
Studying Network #1
Studying Network #1Studying Network #1
Studying Network #1
 
Inside The Java Virtual Machine
Inside The Java Virtual MachineInside The Java Virtual Machine
Inside The Java Virtual Machine
 
FxUG HTML5
FxUG HTML5FxUG HTML5
FxUG HTML5
 
Nettyらへん
NettyらへんNettyらへん
Nettyらへん
 
T2 reading 20101126
T2 reading 20101126T2 reading 20101126
T2 reading 20101126
 
Kanjava20110302
Kanjava20110302Kanjava20110302
Kanjava20110302
 
GWT♥HTML5
GWT♥HTML5GWT♥HTML5
GWT♥HTML5
 
Slim3 Gwt In Action
Slim3 Gwt In ActionSlim3 Gwt In Action
Slim3 Gwt In Action
 
はじめてのPHP
はじめてのPHPはじめてのPHP
はじめてのPHP
 
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日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日日曜日