Log4j2和Web servlet上下文问题

时间:2016-09-08 15:51:01

标签: java jetty log4j2 embedded-jetty

我有一个有趣的情况,我试图解决,使用Log4J 2。

设置:

  • 我有一个Jetty(9)嵌入式启动程序,可以部署war文件。它配置了自己的log4j2.xml。
  • 我有4个部署的WAR文件
  • WAR文件依赖于一些常见的jar文件。 EG。,hibernate,log4j2,json,smtp等......在LOADER的类路径上。
  • WAR文件包含一个web.xml文件,用于定义context-params以设置特定于上下文的日志记录 - 这样每个WAR文件都将写入其自己的日志文件。

通常情况下,日志记录上下文正常工作,除非Web servlet调用公共代码 - 这似乎是进入启动程序的日志。

我花了相当多的时间来试图让分离工作正常。

我的印象是log4j2日志记录上下文会以某种方式从当前线程中提取,但看起来更像是从类名中选择了上下文。

log4j2记录分离/上下文是否扩展到覆盖这种情况?

示例web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0">

  <!-- Servlets -->
  <servlet>
    <servlet-name>SuperSayanServlet</servlet-name>
    <servlet-class>com.example.super.SayanServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SuperSayanServlet<servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

  <context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>file:///opt/config/supersayan.log4j.xml</param-value>
  </context-param>
  <context-param>
    <param-name>log4jContextName</param-name>
    <param-value>SuperSayanServlet</param-value>
  </context-param>
</web-app>

这里共享公共代码的一个主要原因是可以更好地池化数据库连接 - 一个公共池与四个独立的连接池。

任何想法都将不胜感激!

感谢。

0 个答案:

没有答案