【问题标题】:Configuring simplelogger (slf4j) on Tomcat在 Tomcat 上配置 simplelogger (slf4j)
【发布时间】:2015-06-29 15:39:17
【问题描述】:

我有一个在 Windows 机器上运行的 tomcat 7 作为服务。有一个滚动部署方案处于活动状态,如果我在 tomcat/webapps 文件夹中放置一个 war 文件,它会自动解包并部署。我的战争文件如下所示:

MyApp.war
+- META-INF
+- WEB-INF
   +- classes
       + com.company... (the actual class files)
       +-simplelogger.properties
   +- lib
       +- slf4j-api-1.7.12
       +- slf4j-simple-1.7.12
   +- web.xml

在我的 simplelogger.properties 中,我有这个输出属性:

org.slf4j.simpleLogger.logFile=System.out

战争的早期版本使用system.out.println() 进行“记录”,写入到sysout 的所有内容都附加到文件tomcat/logs/stdout.log,所以我认为这是标准的tomcat 行为。

很遗憾,我的新设置不起作用。日志不会出现在 stdout.log 文件中。当我使用 maven/tomcat 插件在 eclipse 中运行战争时,它确实工作正常。

我错过了哪些配置细节? 我在 tomcat/conf 文件夹中查看了任何与日志记录相关的内容,我发现了以下内容:

  • 在 catalina.properties 中:与日志无关。
  • 在 server.xml 中:与日志无关
  • logging.properties:我看到很多设置,但没有与 sysout 或 stdout.logs 相关。作为参考,这里是full file

【问题讨论】:

    标签: java tomcat logging slf4j system.out


    【解决方案1】:

    您必须设置“控制台附加程序”以将 System.out 输出引导到日志文件。

    log4j.xml 中的基本配置如下:

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
     <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
     <param name="Target" value="System.out"/>
     <param name="Threshold" value="DEBUG"/>
     <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
     </layout>
    </appender>
    

    【讨论】:

    • 我没有使用 log4j,在我添加 slf4 api 之前也没有任何 log4j.xml 文件。所以肯定是其他东西使 sysout.out 语句进入 stdout.log。我正在尝试使用 simplelogger 而不是任何其他绑定来实现相同的效果。