Java 自定义Tomcat日志记录类需要ServletContext

Java 自定义Tomcat日志记录类需要ServletContext,java,tomcat,servlets,java.util.logging,Java,Tomcat,Servlets,Java.util.logging,我必须为Tomcat使用自定义记录器。扩展java.util.logging.Handler我实现了一个到定制记录器的桥接器。它通过WEB-INF/classes/logging.properties实例化 但它需要通过war中的属性文件进行配置。因此,我需要ServletContext来执行ServletContext.getResourceAsStream(iniFileName)。由于自定义记录器是由java日志机制创建的,因此我无法从Servlet构造函数或通过依赖项注入获取Servle

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

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


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

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

我不知道这个问题的答案。但是,作为一种快速的解决方案,您可以考虑使用单体。您不能,因为 ServLealWrnest将仅在请求时可用。您可以改为使用,并在
contextInitialized
方法中加载
静态字符串(或其他内容)中的属性属性,然后在需要/需要的任何地方使用它。或者更好的方法是,使用缓存在那里加载属性,然后在项目中的其他地方使用属性。我实现了一个
ServletContextListener
,并将
com.mycompany.MyServletListener
添加到web.xml部署描述符中。现在,在记录任何重要内容之前,我先获取ServletContext。