1

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

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

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

4

4 回答 4

1

您可以做的一件事是在 WAS 中设置一个 Web 服务器IBM 有一个 HTTP 服务器,它只包装 Apache,这可能会让您不那么头疼,或者您可以使用 Apache、IIS 等。

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

于 2011-08-26T22:02:35.837 回答
0

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

当您对新想法持开放态度时,您可以激活 servlet 的请求度量工具,如本博客条目中所述

可以在管理控制台的 Monitoring and Tuning > Request Metrics 下启用请求指标。无需重新启动服务器即可使请求指标开始工作。

  1. 确保选中“为请求指标收集准备服务器”
  2. 为“要检测的组件”选择“自定义”,然后选择“Servlet”
  3. 将“跟踪级别”设置为“啤酒花”
  4. 检查“标准日志”

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

[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字段是以毫秒为单位的响应时间。

于 2012-08-27T08:57:15.510 回答
0

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

这是一个伪示例:

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 属性指向您的侦听器。

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

于 2013-08-27T05:38:46.277 回答
-1

请参阅记录属性和更改找到的跟踪文件

http://publib.boulder.ibm.com/infocenter/wchelp/v6r0m0/index.jsp?topic=%2Fcom.ibm.commerce.admin.doc%2Ftasks%2Ftlslogging.htm

另请参阅http://publib.boulder.ibm.com/httpserv/ihsdiag/WebSphere61.html#LOG

祝你好运,莫

于 2011-11-07T09:46:36.197 回答