对于我当前的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中的依赖项。

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

如果我检出WEB-INF / lib目录并找到我的库,并且解压缩了lib jar,则不再包含log4j.properties文件。因此,我将该文件复制到WEB-INF和WEB-INF / classes以及我的grails应用程序的lib目录中,但是仍然无法完成任何日志记录。

我想知道的是:如果我在运行在tomcat服务器中的grails Web应用程序中引用的库jar中使用slf4j,那么Java在哪里寻找配置文件?

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

谢谢你的帮助

最佳答案

我发现了如何正确放置log4j.properties文件,抱歉打扰您...

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

因此,我将log4j.properties放在/DIR_OF_YOUR_TOMCAT_INSTALL/lib/log4j.properties中,并在Roll4FileAppenders的log4j.properties中使用了绝对路径。现在一切正常。

谢谢阅读

编辑:

一种更优雅的方法是编辑Config.groovy文件。只需在此文件中添加有关appenders或PatternLayouts的规则-还要为编译到外部JAR文件中的特定类添加规则!

07-28 01:56
查看更多