java - 在 Tomcat 中作为 WAR 运行的 Grails 项目中 Maven-build JAR 的 SLF4J 配置位置

标签 java tomcat grails log4j slf4j

对于我当前的 Web 应用程序,我用 Java 编写了一个库来执行一些奇特的后端任务。所有程序输出都通过 log4j 运行,或者更准确地说是通过 slf4j 运行。我做了一个像这样的特殊配置

### Direct log messages to stdout
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p %C{1} %M(): %m%n

### Logger1 ########################################
log4j.appender.Logger1=org.apache.log4j.RollingFileAppender
log4j.appender.Logger1.MaxFileSize=100MB
log4j.appender.Logger1.MaxBackupIndex=50
log4j.appender.Logger1.layout=org.apache.log4j.PatternLayout
log4j.appender.Logger1.layout.ConversionPattern=%d %p %C{1} %M(): %m%n
log4j.appender.Logger1.File=logs/Logger1.log
log4j.logger.com.example.Logger1=INFO,Logger1

# Root logger option
log4j.rootLogger=INFO, console

所以 Logger1 类应该放在 logs/Logger1.log 中。我在 maven 中定义了每个依赖项以集成 SLF4J 和 log4j,并将配置放入 ROOT_OF_SOURCE_CODE/config/log3j.configuration。当我在我的 IDE IntelliJ IDEA 中启动这个库的主要方法时,一切正常,日志文件被创建,我在那里收到消息。

现在我的主要 Web 应用程序是一个 grails 项目,它使用我由 maven 构建的 jar 库。所以我在 grails 中为这个库定义了依赖项。

问题:当我从我的 grails 应用构建 war 并部署它时,Logger1.log 文件中不再有任何输出,甚至没有创建此文件。

如果我查看 WEB-INF/lib 目录并找到我的库,如果我提取 lib jar,则不再包含 log4j.properties 文件。所以我将文件复制到 WEB-INF 和 WEB-INF/classes 以及我的 grails 应用程序的 lib 目录中,但我仍然无法完成任何日志记录。

我想知道的是:如果我在库 jar 中使用 slf4j,java 在哪里查找配置文件,该库 jar 在 tomcat 服务器中运行的 grails 网络应用程序中引用?

我的期望:我想在我的 tomcat 中定义全局 slf4j 配置所在的位置,并且我希望将它放在任何 Web 应用程序目录之外。我还希望将日志文件放在 Web 应用程序目录之外。这可能吗?

感谢您的帮助

最佳答案

我找到了如何正确放置 log4j.properties 文件,很抱歉打扰你......

我查看了 war 文件,发现 grails 打包过程没有自动添加配置文件。此外,我在 grails WAR 文件中的库 jar 文件不包含 log4j.properties 文件。

所以我将我的 log4j.properties 放到/DIR_OF_YOUR_TOMCAT_INSTALL/lib/log4j.properties 并在 log4j.properties 中为我的 RollingFileAppenders 使用绝对路径。现在一切正常..

感谢阅读

编辑:

一种更优雅的方法是编辑 Config.groovy 文件。只需在此文件中添加您的附加程序或 PatternLayouts 规则 - 也适用于编译到外部 JAR 文件中的特定类!

关于java - 在 Tomcat 中作为 WAR 运行的 Grails 项目中 Maven-build JAR 的 SLF4J 配置位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619950/

相关文章:

java - JSON 路径 "$.name"处没有值,异常 : json can not be null or empty, 使用 Mockmvc 和 Spring-boot

java - 从 http 请求的字节数组转换原始数据时面临性能问题

java - Java 的 MD5 哈希问题

Java 热点错误 - V [libjvm.so+0x5c3a84]

xml - 如何将 XML 格式的字符串转换为 grails/groovy 中不带空格的单行 XML 字符串?

java - 转换媒体时显示转换菜单(无 CastCompanionLibrary)

maven-2 - Tapestry5 应用程序未在 WTP Tomcat 服务器上运行

java - 从Java Servlet使用AWS SimpleDB创建域

unit-testing - 需要 Grails 单元测试帮助

grails 4 - 使用代码进行本地化绑定(bind)时,BindingFormat 注释不绑定(bind)日期