38if (reconnectionDelay > 0) {
39fireConnector();
40} else {
41errorHandler
42.error("Detected problem with connection, not reconnecting.",
43e, ErrorCode.GENERIC_FAILURE);
44}
45}
46}
47 }
SocketNode类
Log4J为日志服务器的实现提供了SocketNode类,它接收客户端的链接,并根据配置打印到相关的Appender中。
1 public class SocketNode implements Runnable {
2Socket socket;
3LoggerRepository hierarchy;
4ObjectInputStream ois;
5
6public SocketNode(Socket socket, LoggerRepository hierarchy) {
7this.socket = socket;
8this.hierarchy = hierarchy;
9try {
10ois = new ObjectInputStream(new BufferedInputStream(
11socket.getInputStream()));
12} catch () {
13
14}
15}
16
17public void run() {
18LoggingEvent event;
19Logger remoteLogger;
20try {
21if (ois != null) {
22while (true) {
23event = (LoggingEvent) ois.readObject();
24remoteLogger = hierarchy.getLogger(event.getLoggerName());
25if (event.getLevel().isGreaterOrEqual(
26remoteLogger.getEffectiveLevel())) {
27remoteLogger.callAppenders(event);
28}
29}
30}
31} catch () {
32
33} finally {
34if (ois != null) {
35try {
36ois.close();
37} catch (Exception e) {
38logger.info("Could not close connection.", e);
39}
40}
41if (socket != null) {
42try {
43socket.close();
44} catch (InterruptedIOException e) {
45Thread.currentThread().interrupt();
46} catch (IOException ex) {
47}
48}
49}
50}
51 }
事实上,Log4J提供了两个日志服务器的实现类:SimpleSocketServer和SocketServer。他们都会接收客户端的连接,为每个客户端链接创建一个SocketNode实例,并根据指定的配置文件打印日志消息。它们的不同在于SimpleSocketServer同时支持xml和properties配置文件,而SocketServer只支持properties配置文件;另外,SocketServer支持不同客户端使用不同的配置文件(以客户端主机名作为选择配置文件的方式),而SimpleSocketServer不支持。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-29497-39.html
懂得珍惜
>想当初167舰上的好多东西海军都没有人会操作
加油
请拿出当年“保卫珍宝岛