2012-03-30 18 views
3

我已經具有以下配置構成的SimpleSocketServerLog4J的SocketAppender吞下來自遠程客戶端

public class Simple { 

    public static void main(String[] args) { 
     try 
     { 
     String[] arguments = {"4445", "src/server.xml"}; 
     SimpleSocketServer.main(arguments); 

     } 
     catch (Exception ex) 
     { 
      System.out.println(ex.getMessage()); 
     } 
} 
} 

調試信息:

的server.xml

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
<appender name="rolling" class="org.apache.log4j.RollingFileAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%5p (%d{DATE}) [%t] (%F:%L) - %m%n"/> 
    </layout> 
    <param name="File" value="C:/ponies/async.log"/> 
    <param name="MaxFileSize" value="10KB"/> 
    <param name="MaxBackupIndex" value="5"/> 
    </appender> 

    <root> 
    <param name="level" value="INFO"/> 
    <appender-ref ref="rolling" /> 
    </root> 
</log4j:configuration> 

和客戶端應用程序:

public class Client { 

    private static Log logger = LogFactory.getLog(Client.class); 
    public static void main(String[] a) { 
     // -- Start a new SocketNode 

     try { 
      DOMConfigurator.configure("client.xml"); 
      String m_hostName = "localhost"; 
      String m_port = "4445"; 
      System.out.println("Accessing socket on host " + m_hostName 
        + " through port " + m_port); 
      Socket socket = new Socket(m_hostName, 
        new Integer(m_port).intValue()); 

      // -- All right so far, now create the SocketNode 
      System.out.println("Create the SocketNode listener"); 
      SocketAppender sa = new SocketAppender("localhost", 4445); 
      System.out.println("Activating!"); 
      sa.activateOptions(); 
      System.out.println("Attempting to log"); 
      String logMsg = "Writing log event through SocketAppender instance"; 
      LoggingEvent le = new LoggingEvent("category",Logger.getRootLogger(),new Date().getTime(),Level.DEBUG,logMsg,new Throwable()); 
      System.out.println("Appending!"); 
      sa.append(le); 
      logger.info("Testing!"); 
      new SocketNode(socket, new Hierarchy(Logger.getRootLogger())); 
     } 
     catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

哪個文件正確記錄到文件async.log

client.xml的

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
    <appender name="async" class="org.apache.log4j.AsyncAppender"> 
    <appender-ref ref="console" /> 
    <appender-ref ref="socket" /> 
    <param name="Blocking" value="false"/> 
    <param name="bufferSize" value="256"/> 
    </appender> 

    <appender name="socket" class="org.apache.log4j.net.SocketAppender"> 
    <param name="Port" value="4445"/> 
    <param name="RemoteHost" value="localhost"/> 
    <param name="ReconnectionDelay" value="5000"/> 
    <param name="LocationInfo" value="true"/> 
    </appender> 

    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
    </appender> 

    <logger name="com.test.Client"> 
    <param name="level" value="INFO"/> 
    </logger> 

    <root> 
    <param name="level" value="INFO"/> 
    <appender-ref ref="async" /> 
    </root> 

</log4j:configuration> 

從日誌文件摘錄:

INFO (30 Mar 2012 09:53:21,592) [main] (SimpleSocketServer.java:63) - Waiting to accept a new client. 
INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:65) - Connected to client at /127.0.0.1 
INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:66) - Starting new socket node. 
INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:63) - Waiting to accept a new client. 
INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:65) - Connected to client at /127.0.0.1 
INFO (30 Mar 2012 09:53:24,466) [main] (SimpleSocketServer.java:66) - Starting new socket node. 
INFO (30 Mar 2012 09:53:24,498) [main] (?:?) - Testing! //This is the line of interest 

我的問題是如何使線下決賽[main] (?:?) - Testing!記錄發送它,以及它發生線路的節點?

回答

4

的 「異步」 的appender添加

<param name="LocationInfo" value="true" /> 

了。

,並嘗試使用該客戶端類

public static void main(String[] a) { 
    try { 
     DOMConfigurator.configure("src/forum9944681/client.xml"); 
     logger.info("Testing!"); 
     Thread.sleep(60000); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } 
}