1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.log4j.net;
19
20 import java.io.BufferedInputStream;
21 import java.io.IOException;
22 import java.io.InterruptedIOException;
23 import java.io.ObjectInputStream;
24 import java.net.Socket;
25
26 import org.apache.log4j.Logger;
27 import org.apache.log4j.spi.LoggerRepository;
28 import org.apache.log4j.spi.LoggingEvent;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 public class SocketNode implements Runnable {
45
46 Socket socket;
47 LoggerRepository hierarchy;
48 ObjectInputStream ois;
49
50 static Logger logger = Logger.getLogger(SocketNode.class);
51
52 public SocketNode(Socket socket, LoggerRepository hierarchy) {
53 this.socket = socket;
54 this.hierarchy = hierarchy;
55 try {
56 ois = new ObjectInputStream(
57 new BufferedInputStream(socket.getInputStream()));
58 } catch(InterruptedIOException e) {
59 Thread.currentThread().interrupt();
60 logger.error("Could not open ObjectInputStream to "+socket, e);
61 } catch(IOException e) {
62 logger.error("Could not open ObjectInputStream to "+socket, e);
63 } catch(RuntimeException e) {
64 logger.error("Could not open ObjectInputStream to "+socket, e);
65 }
66 }
67
68
69
70
71
72
73
74 public void run() {
75 LoggingEvent event;
76 Logger remoteLogger;
77
78 try {
79 if (ois != null) {
80 while(true) {
81
82 event = (LoggingEvent) ois.readObject();
83
84 remoteLogger = hierarchy.getLogger(event.getLoggerName());
85
86
87 if(event.getLevel().isGreaterOrEqual(remoteLogger.getEffectiveLevel())) {
88
89 remoteLogger.callAppenders(event);
90 }
91 }
92 }
93 } catch(java.io.EOFException e) {
94 logger.info("Caught java.io.EOFException closing conneciton.");
95 } catch(java.net.SocketException e) {
96 logger.info("Caught java.net.SocketException closing conneciton.");
97 } catch(InterruptedIOException e) {
98 Thread.currentThread().interrupt();
99 logger.info("Caught java.io.InterruptedIOException: "+e);
100 logger.info("Closing connection.");
101 } catch(IOException e) {
102 logger.info("Caught java.io.IOException: "+e);
103 logger.info("Closing connection.");
104 } catch(Exception e) {
105 logger.error("Unexpected exception. Closing conneciton.", e);
106 } finally {
107 if (ois != null) {
108 try {
109 ois.close();
110 } catch(Exception e) {
111 logger.info("Could not close connection.", e);
112 }
113 }
114 if (socket != null) {
115 try {
116 socket.close();
117 } catch(InterruptedIOException e) {
118 Thread.currentThread().interrupt();
119 } catch(IOException ex) {
120 }
121 }
122 }
123 }
124 }