【问题标题】:Java Not Writing to ConsoleJava 不写入控制台
【发布时间】:2012-04-27 13:43:42
【问题描述】:

我正在开发一个不会向控制台输出任何内容的 Java EE Web 应用程序。它使用 log4j,将 log4j.properties 文件设置为输出到 stdout。但是,它不起作用,控制台中没有出现日志记录。事实证明,即使 System.out 也没有出现在控制台中。这是什么原因造成的?

我正在运行 MyEclipse 10.1、log4j-1.2.11、tomcat 5.5.35、java 1.6.0_31。

根据要求,这是我的 .properties 文件:

### direct log messages to stdout ###
# Configure Root Logger
log4j.rootLogger = DEBUG, stdout
log4j.logger.org.hibernate = DEBUG, stdout
#log4j.logger.org.springframework = ERROR, stdout

# Configure stdout Appender 
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =%d [%t] %-5p %c - %m%n

和日志处理程序:

public class LogHandler {
private static Logger sLog = Logger.getLogger(LogHandler.class);
public LogHandler(){

}
public void info_toLOG(String msg00) {
    sLog.info("\n" + msg00 + "\n");
}

public void error_toLOG(Exception e) {
    sLog.error("\n" + e.getClass() + "\n"
            + e.getCause() + "\n"
            + e.getMessage() + "\n"
            + e.getLocalizedMessage() + "\n"
            + e.getStackTrace().toString() + "\n");
}

public void warning_toLOG(String msg00) {
    sLog.warn("\n" + msg00 + "\n");
}

}

我使用 MyEclipse 来启动和停止。只需指向我的tomcat安装目录。 MyEclipse 添加了以下虚拟机参数:

-Dcatalina.home="<tomcat dir>" 
-Dcatalina.base="<tomcat dir> " 
-Djava.endorsed.dirs="<tomcat dir>/common/endorsed" 
-Djava.io.tmpdir="<tomcat dir>/temp" 
-Djava.library.path=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin:"<tomcat dir>/bin" 
-Dsun.io.useCanonCaches=false 
-Xmx1024M

编辑: 感谢那些试图提供帮助的人。我应该在原始问题中说明我正在运行 Mac OS X 10.7.3。 Utilities -> Java Preferences -> Advanced -> Java Console 下有一个设置,一旦设置为 Show Console 就更正了问题。

【问题讨论】:

  • log4j 配置 (logging.apache.org/log4j/1.2/manual.html) 可能很棘手。在典型设置中,设置了侦听器来处理某些类别的日志消息,并且每个侦听器都可以将输出定向到各种目的地(我的术语,不是 log4j 的)。如果您可以发布您的属性文件,以及执行日志记录操作的 Java 代码示例行,我们或许能够指出问题的原因。

标签: java eclipse tomcat logging


【解决方案1】:

在 Tomcat 中,您的 System.out 和 System.err 将转到 catalina.out 日志文件。请在那里检查您的输出。

更新刚刚测试了您的确切 log4j 配置,我可以确认输出已发送到 Tomcat 7 Windows 上的 tomcat7-stdout.&lt;date&gt;.log。

2012-04-27 15:59:47 Commons Daemon procrun stdout initialized
2012-04-27 15:59:51,955 [http-apr-8080-exec-3] INFO  org.apache.log4j.Logger - hey log
blah

这个日志文件名对于 Tomcat 5.5 会有所不同,在 Linux 中应该是 catalina.out,在 Windows 中会有不同的名称(所以文档说,我不知道)。

这是代码:

Logger l = Logger.getLogger(Logger.class);
l.info("hey log");
System.out.println("blah");

UPDATE2 在 Eclipse 下,这种类型的输出应该转到 Eclipse 控制台,尝试构建您的 WAR 文件并将其部署到独立的 Tomcat 中以验证上述内容。

【讨论】:

  • 谢谢,但我没有看到 catalina.out 文件。
  • 您的&lt;TOMCAT_DIR&gt;/logs 目录中有什么?我可能在考虑早期版本的 Tomcat。
  • 在我的 Tomcat 7 中,System.out 以 &lt;TOMCAT_DIR&gt;/logs/tomcat7-stdout.&lt;date&gt;.log 结束。
  • 日志目录为空。在 tomcat 目录的任何地方都没有 .log 或 .out 文件。
  • 在这种情况下,我将成为第二个 @DavidGorsline 并要求查看您的 log4j.properties
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 2013-07-22
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多