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 }
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 =% d % 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 =% d % 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
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 =% d % 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 =% d % 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