【问题标题】:Custom Tomcat logging class needs ServletContext自定义Tomcat日志类需要ServletContext
【发布时间】:2013-03-05 22:23:45
【问题描述】:

我必须为 Tomcat 使用自定义记录器。扩展java.util.logging.Handler 我实现了到自定义记录器的桥梁。它通过WEB-INF/classes/logging.properties 实例化。

但它需要通过战争中的属性文件进行配置。所以我需要 ServletContext 来做servletContext.getResourceAsStream(iniFileName)。由于自定义 Logger 是由 java 日志机制创建的,因此我无法从 Servlet 构造函数或依赖注入获取 ServletContext。

如何在创建任何 Servlet 之前获取 ServletContext?

【问题讨论】:

  • 我不知道这个问题的答案。但作为一种快速解决方法,您可以考虑使用单例。
  • 您不能这样做,因为ServletContext 将仅在每个请求中可用。您可以改为使用ServletContextListener 并在contextInitialized 方法中将属性属性加载到static String(或其他)中,然后在您想要/需要的任何地方使用它。或者更好的是,使用缓存来加载那里的属性,然后在项目的其他地方使用这些属性。

标签: java tomcat servlets java.util.logging


【解决方案1】:

创建一个 ServletContextListener 并以编程方式实例化您的处理程序。如果您必须通过 loggin.property 实例化它,您仍然可以通过 logger API 查找您的处理程序实例并进行配置。

【讨论】:

  • 我实现了一个ServletContextListener 并将<listener><listener-class>com.mycompany.MyServletListener</listener-class></listener> 添加到web.xml 部署描述符中。现在我在记录任何重要的事情之前得到了 ServletContext。
猜你喜欢
  • 2014-05-25
  • 1970-01-01
  • 2018-03-24
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 2016-08-18
相关资源
最近更新 更多