24break;
25}
26boolean discard = true;
27if (blocking && !Thread.interrupted()
28&& Thread.currentThread() != dispatcher) {
29try {
30buffer.wait();
31discard = false;
32} catch (InterruptedException e) {
33Thread.currentThread().interrupt();
34}
35}
36if (discard) {
37String loggerName = event.getLoggerName();
38DiscardSummary summary = (DiscardSummary) discardMap
39.get(loggerName);
40
41if (summary == null) {
42summary = new DiscardSummary(event);
43discardMap.put(loggerName, summary);
44} else {
45summary.add(event);
46}
47break;
48}
49}
50}
51 }
最后,AsyncAppender是Appender的一个容器,它实现了AppenderAttachable接口,改接口的实现主要将实现逻辑代理给AppenderAttachableImpl类。
测试代码如下:
1 @Test
2 public void testAsyncAppender() throws Exception {
3AsyncAppender appender = new AsyncAppender();
4appender.addAppender(new ConsoleAppender(new TTCCLayout()));
5appender.setBufferSize(1);
6appender.setLocationInfo(true);
7appender.activateOptions();
8configAppender(appender);
9
10logTest();
11 }
JDBCAppender类
JDBCAppender将日志保存到的表中,由于保存操作是一个比较费时的操作,因而JDBCAppender默认使用缓存机制,当然你也可以设置缓存大小为1实现实时向插入日志。JDBCAppender中的Layout默认只支持PatternLayout,用户可以通过设置自己的PatternLayout,其中ConversionPattern设置成插入的SQL语句或通过setSql()方法设置SQL语句,JDBCAppender内部会创建相应的PatternLayout,如可以设置SQL语句为:
insert into LogTable(Thread, Class, Message) values(“%t”, “%c”, “%m”)
在doAppend()方法中,JDBCAppender通过layout获取SQL语句,将LoggingEvent实例插入到中。
1 protected String databaseURL = "jdbc:odbc:myDB";
2 protected String databaseUser = "me";
3 protected String databasePassword = "mypassword";
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29497-29.html
美舰在我军的严厉警告下夹着尾巴逃跑了
甲午海战前