如何通过log4j.xml在TomEE 7.0.1中启用EAR app log4j日志记录?

时间:2016-08-04 17:52:56

标签: logging log4j tomee tomee-7

我正在开发一个Java EE应用程序项目,该项目通常在模块和df3$comms <- factor(df3$comms, levels=df3.comms.levels) result$comms_res <- factor(result$comms_res, levels=df3.comms.levels) 上下文中使用log4j(版本1.2.x)。

基本上,通过Maven设置的模块如下:

.war

因此,对于整个EAR应用包,我只有一个| # app-bundle.ear | - app-log4j-config.jar | - src/main/resources/log4j.xml | - app-backend-module.jar (ejb-module) | - app-web-ui-module.war | - app-web-service-module.war

鉴于TomEE 7.0.x应用程序服务器环境,我需要知道,只需记录特定于应用程序的日志消息(通过log4j.xml配置),但,需要执行哪些步骤应用程序服务器生成的消息。

E.g。启动和关闭消息应该转到log4j.xml,但是应该按照我的log4j配置的指定打印/记录来自不同后端或Web模块(见上文)的所有日志输出。

我的问题是:

  1. 我是否需要以任何方式调整TomEE的默认catalina.out?如果是,究竟需要添加/编辑什么?

  2. 我在哪里放conf/system.properties:在TomEE的(a) log4j-<version>.jar(b)的app文件夹中我的EAR包裹?

  3. 到目前为止我尝试过:

    • TomEE安装的lib中的log4j.xmllog4j-<version>.jar - &gt;没有成功

    • 与{EAR>捆绑的libapp-log4j-config.jar - &gt;没有成功

    • log4j-<version>.jar中提取的log4j.xml以及捆绑的apps/project - &gt;没有成功

    任何帮助都会受到欢迎。

    编辑:我在PLUS版本中使用了TomEE 7.0.1。

    EDIT-2:log4j-<version>.jar是通过Maven生成的,如下所示:

    ear

    <dependencies> <dependency> <groupId>de.myapp</groupId> <artifactId>app-log4j-config</artifactId> <version>1.0-SNAPSHOT</version> <type>jar</type> </dependency> <dependency> <groupId>de.myapp</groupId> <artifactId>app-backend-module</artifactId> <version>1.0-SNAPSHOT</version> <type>ejb</type> </dependency> <dependency> <groupId>de.myapp</groupId> <artifactId>app-web-ui-module</artifactId> <version>1.0-SNAPSHOT</version> <type>war</type> </dependency> <dependency> <groupId>de.myapp</groupId> <artifactId>app-web-service-module</artifactId> <version>1.0-SNAPSHOT</version> <type>war</type> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> <type>jar</type> <exclusions> <!-- This dependency will be provided globally in the TomEE deployment --> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> <type>jar</type> </dependency> </dependencies> <build> <finalName>app-bundle</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ear-plugin</artifactId> <version>2.10.1</version> <!-- configuring the ear plugin --> <configuration> <modules> <webModule> <groupId>de.myapp</groupId> <artifactId>app-web-service-module</artifactId> </webModule> <webModule> <groupId>de.myapp</groupId> <artifactId>app-web-ui-module</artifactId> </webModule> <ejbModule> <groupId>de.myapp</groupId> <artifactId>app-backend-module</artifactId> </ejbModule> <jarModule> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <includeInApplicationXml>true</includeInApplicationXml> </jarModule> <jarModule> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <includeInApplicationXml>true</includeInApplicationXml> </jarModule> </modules> </configuration> </plugin> </plugins> </build> 就是这样:

    log4j.xml

    EDIT-3:我尝试通过Maven构建一个瘦的war文件,通过以下方式构建提到的<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> </layout> </appender> <appender name="DEBUGFILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="datePattern" value="'.'yyyy-MM-dd"/> <param name="file" value="logs/app-bundle-DEBUG.log"/> <param name="Append" value="true"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelMatchFilter"> <param name="LevelToMatch" value="debug"/> </filter> <filter class="org.apache.log4j.varia.LevelMatchFilter"> <param name="LevelToMatch" value="info"/> </filter> <filter class="org.apache.log4j.varia.DenyAllFilter"/> </appender> <appender name="INFOFILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="datePattern" value="'.'yyyy-MM-dd"/> <param name="file" value="logs/app-bundle-INFO.log"/> <param name="Append" value="true"/> <param name="Threshold" value="INFO"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelMatchFilter"> <param name="LevelToMatch" value="info"/> </filter> <filter class="org.apache.log4j.varia.DenyAllFilter"/> </appender> <appender name="WARNFILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="datePattern" value="'.'yyyy-MM-dd"/> <param name="file" value="logs/app-bundle-WARN.log"/> <param name="Append" value="true"/> <param name="Threshold" value="WARN"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelMatchFilter"> <param name="LevelToMatch" value="warn"/> </filter> <filter class="org.apache.log4j.varia.DenyAllFilter"/> </appender> <appender name="ERRORFILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="datePattern" value="'.'yyyy-MM-dd"/> <param name="file" value="logs/app-bundle-ERROR.log"/> <param name="Append" value="true"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %c{1}(%L): %m%n"/> </layout> <filter class="org.apache.log4j.varia.LevelMatchFilter"> <param name="LevelToMatch" value="error"/> </filter> <filter class="org.apache.log4j.varia.LevelMatchFilter"> <param name="LevelToMatch" value="fatal"/> </filter> <filter class="org.apache.log4j.varia.DenyAllFilter"/> </appender> <logger name="de.myapp"> <level value="INFO"/> </logger> <root> <level value="WARN"/> <!-- <appender-ref ref="CONSOLE"/> --> <appender-ref ref="ERRORFILE"/> <appender-ref ref="WARNFILE"/> <appender-ref ref="INFOFILE"/> <appender-ref ref="DEBUGFILE"/> </root> 目录:

    lib

    这也没有成功。

    EDIT-4:我已经通过

    <defaultLibBundleDir>lib/</defaultLibBundleDir> <skinnyWars>true</skinnyWars> 添加到EAR包中
    sl4j-api.jar

    在TomEE启动时,将在<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> <type>jar</type> </dependency> <jarModule> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <includeInApplicationXml>true</includeInApplicationXml> </jarModule> 目录中按预期创建文件。但是,日志输出仍然会进入logs而不是指定的文件。

    EDIT-5:我没有通过Maven正确重建项目。最后,将<{1}}添加到 EAR捆绑模块是该问题的解决方案!

2 个答案:

答案 0 :(得分:2)

通常你应该把log4j *放在耳朵的lib部分。究竟什么不适用于此设置?

编辑:还确保你在slf4j上添加slf4j-api-如果你提供自己的slf4j impl,否则它将使用容器一

答案 1 :(得分:2)

这个问题确实与建议的'。''包中缺少的slf4j-api有关。

要追溯我创建的问题Github Sample,这是一个如何在slf4j上下文中将ear与TomEE集成的示例。

您需要确保:

  1. slf4j-*自定义实施需要在jar

  2. 中捆绑为ear模块
  3. 共享记录器配置需要在自己的模块中提供,该模块在jar

  4. 中捆绑为ear模块

    希望这有助于遇到同样问题的人。