zyskm用夢想丈量人生,用奔跑丈量激情

          集群環境下log4j日志文件命名方式

              在項目中,通過log4j可以實現對不同模塊不同級別日志輸出到不同的日志文件中。
          以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>
          按這種方式在單機環境下可以很方便的查詢日志。
          但是在集群環境下,因為項目同時部署在多個機器上,log4j生成的日志文件在每臺機器上都叫xxx_info.log,在開發維護的過程中很難區分那個文件是哪臺服務上的,尤其在日志查詢比較頻繁的情況下做區分有一定的工作量。
              為解決這一問題,可以在生成日志文件時增加機器標識。如100_xxx_info.log,標識ip為172.20.80.100這臺機器上的。
          實現這一功能需要對log4j的Appender做些改動。
          通過查看log4j源碼可以看出來所有的文件輸出都會繼承FileAppender ,修改setFile(String file)方法即可實現。
          重寫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;
              }


              
          // 獲取本機ip最后一位(雙網卡內網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 閱讀(3422) 評論(6)  編輯  收藏

          評論

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

          很不錯啊   回復  更多評論   

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

          方法不錯,不過我覺得不是必要要這樣子做。  回復  更多評論   

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

          哦,這是我們運營提出來的,認為不做區分的話不便于日志查詢,不知道你怎么做的?@萍水相逢
            回復  更多評論   

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

          日志這個東西,一是寫一些有用的東西。二是每天一個(bakcup/housekeeping),每臺server一個,要查的話還要每臺server去看。所以我認為日志最多有個日期就得了。rename的工作在backup, 和當你要下載的時候做。這樣會方便很多。  回復  更多評論   

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

          運營環境的服務器一般開發人員是沒有訪問權限的,需要運營下載轉發,沒有專用下載工具的話,只是用ftp下載,命名工作還是在一開始做好。@萍水相逢
            回復  更多評論   

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

          好,思路不錯,學習了。  回復  更多評論   


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


          網站導航:
           
          主站蜘蛛池模板: 定州市| 明星| 定安县| 石渠县| 安新县| 重庆市| 共和县| 玉门市| 榆林市| 壶关县| 威信县| 花垣县| 乌拉特中旗| 垦利县| 宁夏| 宁安市| 永宁县| 博兴县| 青海省| 红安县| 中江县| 苗栗县| 建阳市| 英德市| 宁蒗| 突泉县| 兰溪市| 淮滨县| 孟津县| 桃源县| 个旧市| 大理市| 施秉县| 师宗县| 浦北县| 邵武市| 永年县| 堆龙德庆县| 从江县| 阳谷县| 安新县|