1
2
3
4
5
6
7
8 package net.sf.jour.log4j;
9
10 import java.net.Socket;
11 import java.net.ServerSocket;
12
13 import org.apache.log4j.Logger;
14 import org.apache.log4j.LogManager;
15 import org.apache.log4j.PropertyConfigurator;
16 import org.apache.log4j.xml.DOMConfigurator;
17
18
19 /***
20 * A simple {@link SocketNode} based server.
21 *
22 <pre>
23 <b>Usage:</b> java org.apache.log4j.net.SimpleSocketServer port configFile
24
25 where <em>port</em> is a part number where the server listens and
26 <em>configFile</em> is a configuration file fed to the {@link
27 PropertyConfigurator} or to {@link DOMConfigurator} if an XML file.
28 </pre>
29 *
30 * @author Ceki Gülcü
31 *
32 * @since 0.8.4
33 * */
34 public class ProfilerSocketServer {
35
36 static Logger cat = Logger.getLogger(ProfilerSocketServer.class);
37
38 static int port;
39
40 public
41 static
42 void main(String argv[]) {
43 if(argv.length == 2) {
44 init(argv[0], argv[1]);
45 } else {
46 usage("Wrong number of arguments.");
47 }
48
49 try {
50 cat.info("Listening on port " + port);
51 ServerSocket serverSocket = new ServerSocket(port);
52 while(true) {
53 cat.info("Waiting to accept a new client.");
54 Socket socket = serverSocket.accept();
55 cat.info("Connected to client at " + socket.getInetAddress());
56 cat.info("Starting new socket node.");
57 new Thread(new ProfilerSocketNode(socket,
58 LogManager.getLoggerRepository())).start();
59 }
60 } catch(Exception e) {
61 e.printStackTrace();
62 }
63 }
64
65
66 static void usage(String msg) {
67 System.err.println(msg);
68 System.err.println(
69 "Usage: java " +ProfilerSocketServer.class.getName() + " port configFile");
70 System.exit(1);
71 }
72
73 static void init(String portStr, String configFile) {
74 try {
75 port = Integer.parseInt(portStr);
76 } catch(java.lang.NumberFormatException e) {
77 e.printStackTrace();
78 usage("Could not interpret port number ["+ portStr +"].");
79 }
80
81 if(configFile.endsWith(".xml")) {
82 new DOMConfigurator().configure(configFile);
83 } else {
84 new PropertyConfigurator().configure(configFile);
85 }
86 }
87 }