Log4j et SocketAppender - Mise en place du serveur de log en localhost
Bonjour,
Après plusieurs recherches infructueuses sur les forums et autres, je vous présente mon problème.
Je voudrais mettre en place log4j sur un serveur de log.
D'un coté, un main créant un logger de type log4j.
D'un autre coté, un autre main (même éclipse, pas le même projet) permettant de créer le listener coté serveur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public static void main(String[] args) { Logger log = Logger.getLogger("testSocket"); log.setLevel(Level.ALL); try { log.addAppender(new SocketAppender("localhost", 5000)); } catch (Exception e) { e.printStackTrace(); } try { log.addAppender(new ConsoleAppender(new SimpleLayout())); } catch (Exception e) { e.printStackTrace(); } log.debug("Ceci est un message Debug"); }
(source : http://21or23.wordpress.com/2007/12/...-tcpip-stream/)
Je lance le main serveur en premier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 package serverSocket; import java.net.ServerSocket; import java.net.Socket; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.EOFException; import java.io.IOException; import org.apache.log4j.spi.LoggingEvent; public class SocketLoggerListener { public static void main(String args[]) throws IOException { final ServerSocket serverSocket = new ServerSocket(5000); final Socket socket = serverSocket.accept(); serverSocket.close(); final InputStream is = socket.getInputStream(); final ObjectInputStream ois = new ObjectInputStream(is); while (true) { Object o = null; try { o = ois.readObject(); } catch (EOFException eofe) { eofe.printStackTrace(); break; } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); break; } catch (Exception e) { e.printStackTrace(); break; // continue; } System.err.println(ois.available()); if (o instanceof LoggingEvent) { final LoggingEvent logEvent = (LoggingEvent) o; processEvent(logEvent); } } ois.close(); socket.close(); } public static void processEvent(LoggingEvent logEvent) { System.out.print("[" + logEvent.getLevel() + "] "); System.out.println(logEvent.getMessage()); } }
Je lance ensuite le main du coté client.
J'ai le message dans la fenêtre console pour le main client.
Dans la console du main serveur, j'ai cette erreur pour la ligne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part o = ois.readObject();
Est-ce que quelqu'un peut éclairer ma lanterne ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2265) at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2673) at java.io.ObjectInputStream$BlockDataInputStream.readFully(ObjectInputStream.java:2697) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1935) at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:479) at org.apache.log4j.spi.LoggingEvent.readObject(LoggingEvent.java:463) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:969) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) at serverSocket.SocketLoggerListener.main(SocketLoggerListener.java:33)
Merci d'avance.
Cordialement,
Xpmich
Partager