我在Windows 2008上使用tomcat6设置了log4j。这些语句被记录到日志文件中,但没有记录System.out
个调用。
当我从命令提示符运行tomcat6.exe
时,提示符上会显示System.out
个调用,但日志文件中不会记录这些调用。
我已定义ConsoleAppender
和Filelogger
,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true" threshold="debug">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout">
</layout>
</appender>
<appender name="CATALINA" class="org.apache.log4j.appender.TimeAndSizeRollingAppender">
<param name="File" value="${catalina.home}/logs/catalina.log"/>
<param name="Threshold" value="DEBUG"/>
<param name="Append" value="true"/>
<param name="ImmediateFlush" value="true"/>
<param name="DatePattern" value=".yyyy-MM-dd"/>
<param name="MaxFileSize" value="100MB"/>
<param name="MaxRollFileCount" value="100"/>
<param name="ScavengeInterval" value="30000"/>
<param name="BufferedIO" value="false"/>
<param name="CompressionAlgorithm" value="ZIP"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MMM dd, yyyy HH:mm:ss a} %c%n \r%p: %m%n"/>
</layout>
</appender>
<logger name="org.apache" additivity="false">
<level value="INFO"/>
<appender-ref ref="CATALINA" />
</logger>
<root>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
</root>
答案 0 :(得分:1)
在上面的log4j配置中,您创建的ConsoleAppender会将所有邮件记录到标准输出中。与System.out.println()调用的位置相同。现在,当您创建第二个Appender(FileAppender)时,您不再写入标准输出,而是现在写入文件。
我建议更改system.out.println()调用以使用Log4j调用[error(),info(),debug()等。]
public class MyClass{
private static Logger logger = Logger.getLogger(MyClass.class);
public MyClass(){
logger.debug("Hello World");
}
}
通过执行此操作,您不会将log4j与标准输出调用混合和匹配,然后可以在控制台和文件写入之间根据需要配置应用程序。通过System.out调用使用Logger的一个好处是,它们可以在运行时配置,并且可以在不同级别记录消息。
根据评论进行修改
默认情况下,Tomcat将stdout消息记录到%tomcat_home%/logs/catalina.out
(每个tomcat规范名称可能略有不同)Tomcat使用名为JULI的日志记录框架来执行其基本日志记录操作。如果您只是希望将日志写入其他位置,然后是tomcat文件夹,则可以通过编辑该文件来完成
%TOMCAT_HOME / CONF / logging.properties
您可能想要解决的另一个问题是完全重定向标准输出。这是不赞成的,但可以做到。如果查看文件catalina.bat(或unix中的.sh),您将看到LOGGING_MANAGER的启动选项,它将覆盖默认的JULI实现。我从未使用过此选项,因此您需要更深入地研究它。要了解JULI,请阅读Apache的Wiki article
答案 1 :(得分:1)
This page提示如何做到这一点,但它有点神秘。简而言之:
\工作区\项目\服务器\服务器名称设置\ config.xml中
还有一个全局的tomcat版本,值得一试
\ Tomcat的\ CONF \ context.xml中
将swallowOutput =“true”添加到上下文中,如下所示
<context swallowOutput="true">
(我认为可选)设置应用程序日志记录。我在我的应用程序中使用了LogBack,但我不确定它是否相关,因为这是通过内部Tomcat日志记录而不是您的应用程序日志记录
在我的tomcat.logging属性中,我有以下日志配置行。这些行定义了我的System.out语句所使用的日志文件,尽管其他人已经说过它转到了catalina.out文件
2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
现在当你做一个System.out.println时,它应该出现在你的localhost.log文件中,就像它对我来说一样,不过正如我所说,有些人说它进入了catalina.log
< / LI>