64}
65return connection;
66 }
67 protected void closeConnection(Connection con) {
68 }
用户可以编写自己的JDBCAppender,继承自JDBCAppender,重写getConnection()和closeConnection(),可以实现从连接池中获取connection,在每次将JDBCAppender缓存中的LoggingEvent列表插入时从连接池中获取缓存,而在该操作完成后将获得的连接释放回连接池。用户也可以重写getLogstatement()以自定义插入LoggingEvent的SQL语句。
JMSAppender类
JMSAppender类将LoggingEvent实例序列化成ObjectMessage,并将其发送到JMS Server的一个指定Topic中。它的实现比较简单,设置相应的connectionFactoryName、topicName、providerURL、userName、password等JMS相应的信息,在activateOptions()方法中创建相应的JMS链接,在doAppend()方法中将LoggingEvent序列化成ObjectMessage发送到JMS Server中,它也可以通过locationInfo字段是否需要计算位置信息。不过这里的实现感觉有一些bug:在序列化LoggingEvent实例之前没有先缓存必要的信息,如threadName,因为这些信息默认是不设置的,具体可以参考JDBCAppender、AsyncAppender等。
1 String securityPrincipalName;
2 String securityCredentials;
3 String initialContextFactoryName;
4 String urlPkgPrefixes;
5 String providerURL;
6 String topicBindingName;
7 String tcfBindingName;
8 String userName;
9 String password;
10 boolean locationInfo;
11
12 TopicConnection topicConnection;
13 TopicSession topicSession;
14 TopicPublisher topicPublisher;
15
16 public void activateOptions() {
17TopicConnectionFactory topicConnectionFactory;
18try {
19Context jndi;
20LogLog.debug("Getting initial context.");
21if (initialContextFactoryName != null) {
22Properties env = new Properties();
23env.put(Context.INITIAL_CONTEXT_FACTORY,
24initialContextFactoryName);
25if (providerURL != null) {
26env.put(Context.PROVIDER_URL, providerURL);
27} else {
28LogLog.warn("You have set InitialContextFactoryName option but not the "
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29497-11.html
帅呆了