1   /*
2    * Copyright (C) The Apache Software Foundation. All rights reserved.
3    *
4    * This software is published under the terms of the Apache Software
5    * License version 1.1, a copy of which has been included with this
6    * distribution in the LICENSE.txt file.  */
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&uuml;lc&uuml;
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  }