龍子 发表于 2017-2-15 11:24:34

自定义weblogic的HTTP访问日志

  分析http的访问日志,得到网站的访问统计。
  
weblogic的HTTP访问日志的常用日志格式不能支持HTTP request请求中的User-Agent(可得到搜索引擎), Referer(可得到搜索关键字)等HEADER,扩展日志中的字段标识符也没有定义,不能对搜索关键字等,因此要使用自定义字段标识符。
1.设置访问日志的方式为自定义。
登录weblogic控制台,设置HTTP访问日志为自定义(具体可参考weblogic的文档)
  2. 编写实现CustomELFLogger接口的自定义的类
java 代码

[*]import java.util.Enumeration;  
[*]  
[*]import weblogic.servlet.logging.CustomELFLogger;  
[*]import weblogic.servlet.logging.FormatStringBuffer;  
[*]import weblogic.servlet.logging.HttpAccountingInfo;  
[*]  
[*]/** 
[*] * 1.0 
[*] */  
[*]public class MyCustomField implements CustomELFLogger {  
[*]  
[*]    /* (non-Javadoc) 
[*]     * @see weblogic.servlet.logging.LogField#logField(weblogic.servlet.logging.HttpAccountingInfo, weblogic.servlet.logging.FormatStringBuffer) 
[*]     * 格式为ip logname datetime methodurl user-agent code length referer 
[*]     * 10.16.79.5 - 2007-04-18 17:02:04 "GET /js/common.js HTTP/1.1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" 200 81 “www.google.cn/search?q=xxx” 
[*]     */  
[*]    public void logField(HttpAccountingInfo metrics,FormatStringBuffer buff) {  
[*]        java.text.SimpleDateFormat sd = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
[*]        buff.appendValueOrDash(metrics.getRemoteAddr());  
[*]        if(metrics.getRemoteUser()!=null && !"".equals(metrics.getRemoteUser().trim())){  
[*]            buff.appendValueOrDash(" "+metrics.getRemoteUser());  
[*]        }else{  
[*]            buff.appendValueOrDash(" -");  
[*]        }  
[*]        String datetime = sd.format(java.util.Calendar.getInstance().getTime());  
[*]        buff.appendValueOrDash(" "+datetime);  
[*]        buff.appendValueOrDash(" \""+metrics.getMethod()+" "+metrics.getRequestURI()+" "+metrics.getProtocol()+"\"");  
[*]        buff.appendValueOrDash(" \""+metrics.getHeader("User-Agent")+"\"");  
[*]        buff.appendValueOrDash(" "+metrics.getResponseStatusCode());  
[*]        buff.appendValueOrDash(" "+metrics.getResponseContentLength());  
[*]        if(metrics.getHeader("Referer")!=null){  
[*]            buff.appendValueOrDash(" \""+metrics.getHeader("Referer")+"\"");  
[*]        }else{  
[*]            buff.appendValueOrDash(" \"-\"");  
[*]        }  
[*]    }  
[*]}  

3.把编译好的类复制到weblogic的启动命令中指定的文件夹,<o:p></o:p>
4.修改第1步指定的Log文件初始设置为:
#Version: 1.0
#Fields:   x-MyCustomField
#Software:      WebLogic
<o:p> </o:p>
注意log文件初始设置最后一行为空行,Fields中”x-“紧跟java类的文件名
5.重新启动weblogic服务
页: [1]
查看完整版本: 自定义weblogic的HTTP访问日志