笨笨
独学而无友,则孤陋而寡闻
似乎在appender里面不能直接调用另外的logger,会丢nullpointer,待验证。
log4j自身提供fallback errorhandler,直接实现
 1 package org.apache.log4j.spi;
 2 import org.apache.log4j.Appender;
 3 import org.apache.log4j.Logger;
 4 public interface ErrorHandler extends OptionHandler {
 5 void setLogger(Logger logger);
 6 void error(String message, Exception e, int errorCode);
 7 void error(String message);
 8 void error(String message, Exception e, int errorCode,
 9 LoggingEvent event);
10 void setAppender(Appender appender);
11 void setBackupAppender(Appender appender);
12 }

不巧的是,我正好不能用,我是需要用来处理一个url数组,要把数据publish到每一个url去,每一个出现exception都不应该影响到下一个的处理,貌似实现ErrorHandler 没办法做到,我的临时处理办法是把publish单独抽出来写到另外一个类里面,这样就可以访问别的logger了。

有空跟踪一下,现在观点保留:
1.  Appdender的生命周期,貌似归log4j的logger容器管理,不会每次创建,现在我怀疑是logger容器只是创建一次实例
2.


  1 # To turn more verbose logging on - change "ERROR" to "WARN" or "DEBUG"
  2 
  3 #log4j.rootCategory=DEBUG, console
  4 log4j.rootCategory=WARN, console, errorlog
  5 
  6 log4j.appender.console=org.apache.log4j.ConsoleAppender
  7 log4j.appender.console.Threshold=DEBUG
  8 log4j.appender.console.layout=org.apache.log4j.PatternLayout
  9 log4j.appender.console.layout.ConversionPattern=%%p [%c{4}] %m%n
 10 
 11 ###
 12 # INFO logging for startup event
 13 ###
 14 log4j.logger.com.atlassian.confluence.lifecycle=INFO, console
 15 log4j.additivity.com.atlassian.confluence.lifecycle=false
 16 
 17 ###
 18 # INFO logging for upgrade tasks.
 19 ###
 20 log4j.logger.com.atlassian.confluence.upgrade=INFO, console
 21 log4j.additivity.com.atlassian.confluence.upgrade=false
 22 
 23 ###
 24 # THREAD LOCAL ERROR LOG APPENDER
 25 ###
 26 log4j.appender.errorlog=com.atlassian.core.logging.ThreadLocalErrorLogAppender
 27 log4j.appender.errorlog.Threshold=WARN
 28 
 29 #log4j.logger.velocity=DEBUG, console
 30 #log4j.additivity.velocity=false
 31 
 32 ## mail removal debugging
 33 log4j.logger.com.atlassian.confluence.mail.actions=INFO, console
 34 
 35 # suppress WARN log statements from the ReadWriteCache class (CONF-2517)
 36 log4j.logger.net.sf.hibernate.cache.ReadWriteCache=ERROR, console
 37 
 38 #####################
 39 # Hibernate logging #
 40 #####################
 41 
 42 # suppress JDBCExceptionReporter warnings (there can be a few of these under DB2)
 43 log4j.logger.net.sf.hibernate.util.JDBCExceptionReporter=ERROR, console
 44 
 45 # suppress warnings from the SessionImpl (like Narrowing proxy to class com.atlassian.confluence.pages.Page - this operation breaks ==)
 46 log4j.logger.net.sf.hibernate.impl.SessionImpl=ERROR, console
 47 
 48 # suppress PDF export logs to errors only
 49 log4j.logger.com.atlassian.confluence.importexport.impl.PdfExporter=ERROR, console
 50 
 51 # suppress FileUtils (file management) warnings
 52 log4j.logger.bucket.util.FileUtils=ERROR, console
 53 
 54 #log4j.logger.com.atlassian.confluence.search.UnindexingHibernateInterceptor=DEBUG, console
 55 #log4j.additivity.com.atlassian.confluence.search.UnindexingHibernateInterceptor=false
 56 
 57 ### useful confluence classes
 58 #log4j.logger.com.atlassian.confluence=INFO, console
 59 #log4j.additivity.com.atlassian.confluence=false
 60 #log4j.logger.com.atlassian.confluence.setup=DEBUG, console
 61 #log4j.logger.com.atlassian.confluence.setup.actions=DEBUG, console
 62 #log4j.logger.com.atlassian.confluence.util=DEBUG, console
 63 
 64 ### show progress building of ANCESTOR table
 65 #log4j.logger.com.atlassian.confluence.util.AncestorTableBuilder=INFO, console
 66 
 67 ### hibernate
 68 #log4j.logger.net.sf.hibernate=DEBUG, console
 69 #log4j.additivity.net.sf.hibernate=false
 70 
 71 ### ehcache
 72 #log4j.logger.net.sf.ehcache=DEBUG, console
 73 #log4j.additivity.net.sf.ehcache=false
 74 
 75 ### log JDBC bind parameters ###
 76 # log4j.logger.net.sf.hibernate.type=DEBUG
 77 
 78 ### hibernate caching activity
 79 #log4j.logger.net.sf.hibernate.cache=DEBUG
 80 
 81 ### log prepared statement cache activity ###
 82 #log4j.logger.net.sf.hibernate.ps.PreparedStatementCache=DEBUG
 83 
 84 ### opensymphony (sitemesh, webwork, xwork)
 85 #log4j.logger.com.opensymphony=DEBUG, console
 86 
 87 ### Spring
 88 # log4j.logger.org.springframework=WARN, console
 89 # log4j.logger.springframework.transaction.support.TransactionSynchronizationManager=DEBUG
 90 # com.atlassian.confluence.setup.spring.SpringSessionInViewFilter=DEBUG
 91 # log4j.additivity.org.springframework=true
 92 
 93 ### Apache stuff
 94 # log4j.logger.org.apache=WARN, console
 95 # log4j.additivity.org.apache=false
 96 
 97 ### WIKI Engine
 98 #log4j.logger.com.atlassian.confluence.importexport=WARN, console
 99 #log4j.logger.com.atlassian.confluence.renderer=WARN, console
100 
101 
102 
103 ####
104 # PROFILING LOG APPENDER
105 ###
106 #log4j.appender.profiling=com.atlassian.confluence.util.profiling.ProfilingLogAppender
107 #log4j.appender.profiling.Threshold=DEBUG
108 #log4j.appender.profiling.layout=org.apache.log4j.PatternLayout
109 #log4j.appender.profiling.layout.ConversionPattern=%%p [%c{4}] %m%n
110 
111 ## profiling debugging
112 #log4j.logger.net.sf.hibernate.cache.ReadWriteCache=DEBUG, profiling
113 #log4j.logger.com.atlassian.confluence.setup.spring.SpringSessionInViewFilter=DEBUG, profiling
114 #log4j.logger.com.atlassian.confluence.util=DEBUG, profiling
115 #log4j.logger.org.springframework.orm.hibernate.HibernateTransactionManager=DEBUG, profiling
116 #log4j.logger.com.opensymphony.oscache.web.filter=DEBUG, profiling
117 #log4j.logger.net.sf.ehcache.store.MemoryStore=DEBUG, profiling
118 #log4j.logger.net.sf.hibernate.ps.PreparedStatementCache=DEBUG, profiling
119 #log4j.logger.net.sf.hibernate.type=DEBUG, profiling
posted on 2005-11-15 11:00  笨笨  阅读(1203)  评论(0编辑  收藏  举报