WebSphere自定义访问日志

时间:2011-08-26 18:19:25

标签: java-ee logging websphere websphere-7

是否可以自定义WebSphere访问日志(通过代码或配置)?我在控制台中看到WebSphere支持NCSA通用或组合格式,但是没有自定义格式的选项。

我希望自定义访问日志以包含有助于调试的其他信息,例如代理,vip,LB,响应时间等。

如果不可能,我会开箱即用。关键是我正在尝试记录其他信息以进行调试。 log4j是一个选项吗?也许自定义跟踪日志?

4 个答案:

答案 0 :(得分:1)

你可以做的一件事是set up a webserver in WAS IBM有一个HTTP服务器,它只包装Apache,这可能会让你减少麻烦,或者你可以使用Apache,IIS等。

配置完成后,您应该能够安装所需的Apache模块来处理自定义日志记录。这是如何工作的,Web服务器充当您的实际应用程序服务器的前端,并将请求传递给它。

答案 1 :(得分:0)

自定义访问日志可用于WAS 8.0.0.2及更新版本。

当您对新想法持开放态度时,您可以按照此blog entry

中的说明激活servlet的请求度量工具。
  

可以在监控和调优>下的管理控制台中启用请求指标。请求指标。无需重新启动服务器即可开始使用请求指标。

     
      
  1. 确保选中“为请求度量标准集准备服务器”
  2.   
  3. 为“要检测的组件”选择“自定义”,然后选择“Servlet”
  4.   
  5. 将“跟踪级别”设置为“Hops”
  6.   
  7. 检查“标准日志”
  8.   

为每个请求记录的信息采用此格式

[9/26/11 15:43:45:448 PDT] 00000027 PmiRmArmWrapp I PMRM0003I: parent:ver=1,ip=10.20.30.8,time=1317075586068,pid=32507,reqid=1,event=1 - current:ver=1,ip=10.20.30.8,time=1317075586068,pid=32507,reqid=1,event=1 type=URI detail=/swat/Sleep elapsed=1004

elapsed字段是响应时间,以毫秒为单位。

答案 2 :(得分:0)

一种实用的方法是创建自己的自定义请求记录器实现。您可以使用带有标准Servlet API ServletRequestListener的WAS功能“Global webcontainer listener”来执行此操作。

这是一个伪示例:

import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;

public class HttpServletRequestRequestListener implements ServletRequestListener {

ThreadLocal<Long> threadLocal = new ThreadLocal<Long>(); 

@Override
public void requestDestroyed(ServletRequestEvent aArg0) {
    HttpServletRequest tHttpServletRequest = getHttpServletRequest(aArg0.getServletRequest());
    if(tHttpServletRequest != null){
        Long tStart = threadLocal.get();
        long tCallDelay = -1;
        if(tStart != null){
            tCallDelay = System.currentTimeMillis() - tStart.longValue();
        }
        //In this class I will log the request including cookies etc. 
        // in my own customized format...
        MyCustomLogger.log(tHttpServletRequest,tCallDelay);
    }

}

@Override
public void requestInitialized(ServletRequestEvent aArg0) {
    long tStart = System.currentTimeMillis();
    threadLocal.set(tStart);

}

private static HttpServletRequest getHttpServletRequest(ServletRequest aServletRequest) {
    if (aServletRequest instanceof HttpServletRequest) {
        return (HttpServletRequest) aServletRequest;
    }
    return null;
}

}

此外,在webcontainer自定义属性中,您应该使用listeners属性指向您的侦听器。

以下是有关如何配置webcontainer侦听器的更多信息: http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.base.doc%2Finfo%2Faes%2Fae%2Frweb_custom_props.html

答案 3 :(得分:-1)