Servlet过滤器和线程?

时间:2010-10-15 17:29:38

标签: java servlets weblogic weblogic-10.x servlet-filters

我正在Weblogic 10.3.3上构建一个Web服务,我正在使用servlet过滤器将请求记录到数据库中。我不希望过滤器减慢对Web服务的调用。所以我实际上有两个问题。

1)过滤器,或者我可以使过滤器在单独的线程上进行日志记录吗?如果是这样的话?

2)有没有办法可以动态打开或关闭过滤器而无需重新部署代码。

由于

2 个答案:

答案 0 :(得分:5)

  1. 过滤器由分配给您的请求的线程执行。如果您愿意,可以创建FutureTask来进行日志记录,但是Filter中没有任何内置功能可以让您执行此类操作。如果您正在使用Log4J,则可以登录到队列并以此方式卸载您的应用程序。
  2. 过滤器在web.xml中添加,因此您无法将其关闭或以此方式关闭。如果内部有一个JMX bean可以完成工作,也许你可以使用JMX控制台关闭和打开它的功能。
  3. 你可能会对这里的过早优化感到内疚。如果您记录或过滤内容会成为一个问题,我会等到我开始重新设计修复它之前有证据证明它。

答案 1 :(得分:0)

许多日志记录软件支持“异步日志记录”,其中日志事件非常快速地放入队列,然后一个单独的线程尽快将它们写入持久存储。这里的缺点是,如果您的应用程序在事件仍在队列中时崩溃,您更有可能丢失消息。总开销也略高,因为你有多个线程相互协调。

此外,许多日志记录框架都有一个“监视配置”选项,可以定期检查配置文件。这允许您在“热”系统上启用或禁用记录器。

您使用的是哪种日志库?