是否可以自定义WebSphere访问日志(通过代码或配置)?我在控制台中看到WebSphere支持NCSA通用或组合格式,但是没有自定义格式的选项。
我希望自定义访问日志以包含有助于调试的其他信息,例如代理,vip,LB,响应时间等。
如果不可能,我会开箱即用。关键是我正在尝试记录其他信息以进行调试。 log4j是一个选项吗?也许自定义跟踪日志?
答案 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的请求度量工具。可以在监控和调优>下的管理控制台中启用请求指标。请求指标。无需重新启动服务器即可开始使用请求指标。
- 确保选中“为请求度量标准集准备服务器”
- 为“要检测的组件”选择“自定义”,然后选择“Servlet”
- 将“跟踪级别”设置为“Hops”
- 检查“标准日志”
醇>
为每个请求记录的信息采用此格式
[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)