代码之家  ›  专栏  ›  技术社区  ›  sridhar

Log4j2不在EAR中记录来自WAR和非EJB jar的语句

  •  0
  • sridhar  · 技术社区  · 9 年前

    我有一个未包装的 EAR 部署于 $JBOSS_HOME/standalone/deployments 在里面 Wildfly-8.2.0.Final AS 。它包含未包装的 WAR 和应用程序jar文件。

    HelloWorldEar-0.0.1-SNAPSHOT.ear
    -HelloWorldServlet-0.0.1-SNAPSHOT.war
    -lib
    -META-INF
    -aspectjrt-1.8.6.jar
    -HelloWorldAnnotation-0.0.1-SNAPSHOT.jar
    -HelloWorldAspect-0.0.1-SNAPSHOT.jar
    -HelloWorldCommonLib-0.0.1-SNAPSHOT.jar
    -HelloWorldEJB-0.0.1-SNAPSHOT.jar
    -log4j2.xml
    

    lib 的文件夹 耳朵 包含与log4j2相关的API,用于提供日志功能。

    lib
    -commons-logging-1.2.jar
    -HelloWorldLog4jPlugin-0.0.1-SNAPSHOT.jar (Jar containing custom log4j2 plugins)
    -log4j-api-2.4.1.jar
    -log4j-core-2.4.1.jar
    -log4j-jcl-2.4.1.jar
    -log4j-web-2.4.1.jar
    

    我正在通过初始化来初始化log4j2配置 log4j2.xml 在中的启动单例bean中使用 HelloWorldEJB-0.0.1-SNAPSHOT.jar .

    String path = System.getProperty("jboss.home.dir")
                    + "/standalone/deployments/HelloWorldEar-0.0.1-SNAPSHOT.ear/log4j2.xml";
    ConfigurationSource source;
            File configFile = new File(path);
            try {
                source = new ConfigurationSource(new FileInputStream(configFile), configFile);
                Configurator.initialize(null, source);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    

    log4j2.xml内容

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="trace">
    <Appenders>
    <RollingFile name="SERVER_FILE" fileName="${sys:LOGS}/sample.log" filePattern="${sys:LOGS}/sample.log.%i" append="true">
    <PatternLayout>
    <pattern>%d %-5p [%c{1}] [EventId: %e] [%t] %m%n</pattern>
    </PatternLayout>
    <Policies>
    <SizeBasedTriggeringPolicy size="500 KB" />
    </Policies>
    <DefaultRolloverStrategy max="5"/>
    </RollingFile>
    <Console name="CONSOLE" target="SYSTEM_OUT">
    <PatternLayout>
    <pattern>%d{ABSOLUTE} %-5p [%c{1}] %m%n</pattern>
    </PatternLayout>
    </Console>
    </Appenders>
    <Loggers>
    <Logger name="com.test.prototype.log4j" level="debug">
    <AppenderRef ref="SERVER_FILE"/>
    </Logger>
    <Root level="debug" additivity="false">
    <AppenderRef ref="CONSOLE"/>
    </Root>
    </Loggers>
    </Configuration>
    

    所有的子包和类都在包下定义 com.test.prototype.log4j .

    类中添加的日志语句 HelloWorldEJB-0.0.1-SNAPSHOT.jar 记录在日志文件中。

    我的问题是来自其他应用程序jar和WAR的1.log语句没有被记录到日志文件中。 2.虽然添加了log4j2所需的系统参数,但通过commons日志API无法进行日志记录。

    System.setProperty("org.apache.commons.logging.Log",
                    "org.apache.commons.logging.impl.Log4JLogger");
    

    我已尝试添加 class-path 在应用程序jars中,在 web.xml 属于 战争 文件,但什么都没用。 org.apache.logging.log4j.web.Log4jServletContextListener

    我需要 日志4j2.xml 在下面 耳朵 它应该为EAR中添加的所有应用程序jar和WAR服务。有人能帮我解决这个问题吗。

    1 回复  |  直到 9 年前
        1
  •  0
  •   Remko Popma    9 年前

    您是否尝试使用系统属性指定log4j2.xml配置文件位置 -Dlog4j.configurationFile=path/to/log4j2.xml ? 我怀疑您现在初始化log4j的方式在其他WAR中是不可见的。

    如果失败,请在log4j2 Jira问题跟踪器上提出此问题。 https://issues.apache.org/jira/browse/LOG4J2