zyskm用夢(mèng)想丈量人生,用奔跑丈量激情

          集群環(huán)境下log4j日志文件命名方式

              在項(xiàng)目中,通過log4j可以實(shí)現(xiàn)對(duì)不同模塊不同級(jí)別日志輸出到不同的日志文件中。
          以xml格式為例:
          <appender name="FILE_INFO" class="org.apache.log4j.RollingFileAppender">
              
          <param name="File" value="/usr/local/logs/xxx_info.log"/>
              
          <layout class="org.apache.log4j.PatternLayout">
                  
          <param name="ConversionPattern" value="%d %p [%c] [%M]:%L - %m%n"/>
              
          </layout>
              
          <filter class="org.apache.log4j.varia.LevelRangeFilter">
                  
          <param name="levelMin" value="INFO" />
                  
          <param name="levelMax" value="INFO" />
                  
          <param name="AcceptOnMatch" value="true" />
              
          </filter>
          </appender>
          按這種方式在單機(jī)環(huán)境下可以很方便的查詢?nèi)罩尽?br />但是在集群環(huán)境下,因?yàn)轫?xiàng)目同時(shí)部署在多個(gè)機(jī)器上,log4j生成的日志文件在每臺(tái)機(jī)器上都叫xxx_info.log,在開發(fā)維護(hù)的過程中很難區(qū)分那個(gè)文件是哪臺(tái)服務(wù)上的,尤其在日志查詢比較頻繁的情況下做區(qū)分有一定的工作量。
              為解決這一問題,可以在生成日志文件時(shí)增加機(jī)器標(biāo)識(shí)。如100_xxx_info.log,標(biāo)識(shí)ip為172.20.80.100這臺(tái)機(jī)器上的。
          實(shí)現(xiàn)這一功能需要對(duì)log4j的Appender做些改動(dòng)。
          通過查看log4j源碼可以看出來所有的文件輸出都會(huì)繼承FileAppender ,修改setFile(String file)方法即可實(shí)現(xiàn)。
          重寫DailyRollingFileAppender,改繼承重寫后的fileappender。
          /** 從配置文件讀取日志文件名 */
              
          public void setFile(String file) {
                  String val 
          = file.trim();
                  
          int index = val.lastIndexOf('/'+ 1;
                  String path 
          = val.substring(0, index);
                  String name 
          = val.substring(index);
                  fileName 
          = path + getIpSuffix() + "_" + name;
              }


              
          // 獲取本機(jī)ip最后一位(雙網(wǎng)卡內(nèi)網(wǎng)ip)
              private String getIpSuffix() {
                  String ip 
          = null;
                  String suffix 
          = "";
                  NetworkInterface ni;
                  
          try {
                      ni 
          = NetworkInterface.getByName("eth1");
                      
          if (ni == null)
                          ni 
          = NetworkInterface.getByName("eth0");
                      Enumeration
          <InetAddress> ias = ni.getInetAddresses();
                      
          for (; ias.hasMoreElements();) {
                          InetAddress ia 
          = ias.nextElement();
                          
          if (ia instanceof InetAddress) {
                              ip 
          = ia.getHostAddress();
                          }

                      }

                      
          if (ip == null{
                          InetAddress addr 
          = InetAddress.getLocalHost();
                          ip 
          = addr.getHostAddress();
                      }

                  }
           catch (SocketException e1) {
                      e1.printStackTrace();
                  }
           catch (UnknownHostException e) {
                      e.printStackTrace();
                  }

                  
          if (ip != null{
                      
          int index = ip.lastIndexOf('.'+ 1;
                      suffix 
          = ip.substring(index);
                  }

                  
          return suffix;
              }


          posted on 2011-10-24 15:33 zyskm 閱讀(3423) 評(píng)論(6)  編輯  收藏

          評(píng)論

          # re: 集群環(huán)境下log4j日志文件命名方式 2011-10-25 08:23 tbw淘寶

          很不錯(cuò)啊   回復(fù)  更多評(píng)論   

          # re: 集群環(huán)境下log4j日志文件命名方式 2011-12-09 00:37 萍水相逢

          方法不錯(cuò),不過我覺得不是必要要這樣子做。  回復(fù)  更多評(píng)論   

          # re: 集群環(huán)境下log4j日志文件命名方式 2011-12-09 09:47 zyskm

          哦,這是我們運(yùn)營(yíng)提出來的,認(rèn)為不做區(qū)分的話不便于日志查詢,不知道你怎么做的?@萍水相逢
            回復(fù)  更多評(píng)論   

          # re: 集群環(huán)境下log4j日志文件命名方式 2011-12-17 13:50 萍水相逢

          日志這個(gè)東西,一是寫一些有用的東西。二是每天一個(gè)(bakcup/housekeeping),每臺(tái)server一個(gè),要查的話還要每臺(tái)server去看。所以我認(rèn)為日志最多有個(gè)日期就得了。rename的工作在backup, 和當(dāng)你要下載的時(shí)候做。這樣會(huì)方便很多。  回復(fù)  更多評(píng)論   

          # re: 集群環(huán)境下log4j日志文件命名方式 2011-12-19 13:21 zyskm

          運(yùn)營(yíng)環(huán)境的服務(wù)器一般開發(fā)人員是沒有訪問權(quán)限的,需要運(yùn)營(yíng)下載轉(zhuǎn)發(fā),沒有專用下載工具的話,只是用ftp下載,命名工作還是在一開始做好。@萍水相逢
            回復(fù)  更多評(píng)論   

          # re: 集群環(huán)境下log4j日志文件命名方式 2012-02-03 09:49 yan_dk

          好,思路不錯(cuò),學(xué)習(xí)了。  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 五华县| 岢岚县| 全椒县| 伊通| 舟山市| 慈利县| 临汾市| 天门市| 金门县| 邹平县| 西畴县| 武威市| 杭锦后旗| 武夷山市| 安远县| 延安市| 钟祥市| 永安市| 彩票| 巴林左旗| 阿拉善盟| 阳城县| 内丘县| 台南县| 潼南县| 枣强县| 资中县| 同江市| 会同县| 石河子市| 万宁市| 屯门区| 喀喇沁旗| 金门县| 沅陵县| 盐池县| 华池县| 桃园市| 延川县| 八宿县| 宝兴县|