<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    使用Log4j搭建一個日志服務器
    agamem 原創   更新:2005-11-22 14:31:17  版本: 1.0   

       最近項目要用到日志服務器,需要把所有服務器的日志統一存入一個日志文件服務器中,于是就想到了Log4j的SocketAppender。
       網上一通搜索,終于找到了相關的只言片語,內容幾乎雷同,和examples\lf5\UsingSocketAppenders中提供的例子沒有什么區別!
       只好自己研究了!

    1.基本使用


    1.1服務器


       這個日志服務器的服務器端需要運行:
      log4j jar包中的org.apache.log4j.net.SocketServer 
      加參數 【本地監聽端口】【配置文件】【客戶端配置文件目錄】
      第三個參數【配置文件目錄】其實指的是針對每個客戶端的配置文件,等會詳細講!現在用“.”就可以了.

      服務器端的配置文件可以用這個(引自利用Log4j 創建日志服務器 By ?の?):
     #文件名socketserver.properties
     #如果需要顯示日志界面,可以將本行啟用
     #log4j.rootCategory=, A1  
     log4j.rootLogger=DEBUG,A3
     log4j.category.org.apache.log4j.net=INFO

     log4j.appender.A1=org.apache.log4j.lf5.LF5Appender
     log4j.appender.A1.MaxNumberOfRecords=700

     log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender
     log4j.appender.A4.file=server.log
     log4j.appender.A4.DatePattern='.'yyyyMMdd
     log4j.appender.A4.layout=org.apache.log4j.PatternLayout
     log4j.appender.A4.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

     log4j.appender.A3=org.apache.log4j.RollingFileAppender
     log4j.appender.A3.file=server2.log
     log4j.appender.A3.MaxFileSize=1024KB
     log4j.appender.A3.MaxBackupIndex=999
     log4j.appender.A3.layout=org.apache.log4j.PatternLayout
     log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

     其中A1是啟動Lf5的log監視終端,A3限制大小的文件,A4是日期滾動文件。
     單A3,A4是講所有客戶端的日志都存放到了同一個日志文件中,我覺的這種方法并不好。

    1.2客戶端


    客戶端的配置文件是這樣的:
     log4j.rootCategory=,SOCKET
     log4j.addivity.org.apache=true  
    #應用于socket 
    log4j.appender.SOCKET=org.apache.log4j.net.SocketAppender 
    log4j.appender.SOCKET.RemoteHost=localhost   #服務器的IP地址
    log4j.appender.SOCKET.Port=1978              #服務器的監聽端口
    log4j.appender.SOCKET.LocationInfo=true      #這個是什么我不知道
    log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout 
    log4j.appender.SOCKET.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%t%m%n


    #A2
    log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A2.file=server.log
    log4j.appender.A2.DatePattern='.'yyyy-MM-dd
    log4j.appender.A2.layout=org.apache.log4j.PatternLayout
    log4j.appender.A2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

    啟動服務器端,再運行客戶端就可以了!但所有的服務器端/客戶端的日志都放到了一個日志文件中!

    2.稍微高級點的使用


     下面講如何把各個客戶端和服務器端的日志分別放到不同的日志文件中.
     這個我在網上找了好久也沒有找到!

    2.1服務器

     
      服務器的配置文件不用怎么改動,如果你不需要在同一個文件中存放所有日志,可以把配置文件第一行的A3去掉。
      但服務器端有個更大的麻煩:代碼有問題!問題夠大了吧,不知道算不算是個bug(我用的是1.2.11版log4j)。
      改吧!
      打開log4j目錄下的src\java\org\apache\log4j\net\SocketServer.java
    在這段中改動(看下面代碼第12行)
    1. LoggerRepository configureHierarchy(InetAddress inetAddress) {
    2.     cat.info("Locating configuration file for "+inetAddress);
    3.     // We assume that the toSting method of InetAddress returns is in
    4.     // the format hostname/d1.d2.d3.d4 e.g. torino/192.168.1.1
    5.     String s = inetAddress.toString();
    6.     int i = s.indexOf("/");
    7.     if(i == -1) {
    8.       cat.warn("Could not parse the inetAddress ["+inetAddress+
    9.            "]. Using default hierarchy.");
    10.       return genericHierarchy();
    11.     } else {
    12.       //這個是什么意思,專門取"/"符號嗎?明顯是錯的!閉掉
    13. //    String key = s.substring(0, i);
    14.       //改為
    15.     String key = s.substring(i+1);
    16.       File configFile = new File(dir, key+CONFIG_FILE_EXT);
    17.       if(configFile.exists()) {
    18.     Hierarchy h = new Hierarchy(new RootLogger((Level) Priority.DEBUG));
    19.     hierarchyMap.put(inetAddress, h);
    20.     new PropertyConfigurator().doConfigure(configFile.getAbsolutePath(), h);
    21.     return h;
    22.       } else {
    23.     cat.warn("Could not find config file ["+configFile+"].");
    24.     return genericHierarchy();
    25.       }
    26.     }
    27.   }

    編譯文件!

    打開log4j目錄下的src\java\org\apache\log4j\net\SocketNode.java
    (改這段是因為我用的時候出錯!看不出來改不改有什么區別)
    改第54行
    1.       ois = new ObjectInputStream(
    2.                          new BufferedInputStream(socket.getInputStream()));
    3.    

    1.     InputStream is = socket.getInputStream();
    2.     if (is != null) {
    3.        ois = new ObjectInputStream(new BufferedInputStream(is));
    4.     }

    文件頭加 import java.io.InputStream;
    編譯文件!

    現在為每個配置客戶端編配置文件,把配置文件放到【客戶端配置文件目錄】中:
    log4j.rootCategory=,A4
    log4j.appender.A4=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A4.file=127.0.0.1.log   #為每個客戶端取不同的名字
    log4j.appender.A4.DatePattern='.'yyyyMMdd
    log4j.appender.A4.layout=org.apache.log4j.PatternLayout
    log4j.appender.A4.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

    保存文件名為[客戶端ip地址].lcf  如192.168.0.126.lcf

    2.2 客戶端


      客戶端不用改變,太幸運了!!

    ok啦!
    啟動服務器,啟動客戶端,現在服務器的日志放到了server.log中,有配置文件的客戶端的日志會放到相應的日志文件中,沒有配置文件的客戶端的日志依然放在server.log中!

    SocketServer.java 和 SocketNode.java兩個文件可以單獨做一個工程,把他們的package去掉就行了!

    下面的工作弄弄lf5!!等我弄好了再發上來!
    bye-bye!
    posted on 2007-10-08 09:24 蘆葦 閱讀(2270) 評論(1)  編輯  收藏

    Feedback

    # re: 使用Log4j搭建一個日志服務器 2013-05-28 15:38 hsyan
    請教一下如何編譯?  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲免费观看在线视频| 国产精品亚洲а∨无码播放不卡| 亚洲国产精品无码成人片久久| 亚洲人午夜射精精品日韩| 免费jjzz在线播放国产| 日本免费一区二区三区最新| 大陆一级毛片免费视频观看| 女性自慰aⅴ片高清免费| 日本媚薬痉挛在线观看免费| 国产成人精品男人免费| 亚洲国产精品无码久久九九| 亚洲国产成人精品女人久久久 | 羞羞漫画小舞被黄漫免费| 免费无遮挡无码视频在线观看| 一个人免费观看视频在线中文 | 亚洲五月丁香综合视频| 亚洲一区二区三区高清不卡| 亚洲国产欧美日韩精品一区二区三区 | 精品四虎免费观看国产高清午夜| 国产一级片免费看| 曰批全过程免费视频网址| 国产香蕉九九久久精品免费| 国产福利免费观看| 久久亚洲中文字幕精品一区四 | 成人免费在线观看网站| 国产成人精品123区免费视频| 亚洲国产精品无码久久九九 | 全部免费毛片免费播放| 亚洲中文字幕无码中文字在线| 亚洲av色福利天堂| 亚洲AV无码乱码在线观看代蜜桃 | 亚洲免费观看网站| 国产亚洲视频在线播放大全| 国产在线国偷精品免费看| 亚洲免费电影网站| 国产精品视频免费一区二区三区| 久久久久亚洲AV成人网| 亚洲一区二区在线免费观看| 亚洲日韩中文字幕无码一区| 国产高潮流白浆喷水免费A片 | 99re6在线精品视频免费播放|