我正在尝试实现为log4j编写的自定义类,并将其与Windows上的Tomcat5结合使用。现在,请记住,tomcat5和log4j都已正确安装和配置,并且工作正常。然而,添加这个类并不能产生预期的结果,这正是本文的重点。我从下面的链接发现了这个类:http://sysgears.com/articles/how-to-redirect-stdout-and-stderr-writing-to-a-log4j-appender#comment-749)。
我编写了这个类,并在类声明上面加上了以下内容:
package LoggingOutputStream;
import java.io.PrintStream;
import java.io.OutputStream;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
然后,我成功编译了它。然后链接声明使用类,写入:
System.setErr(new PrintStream(new LoggingOutputStream(
System.err, Logger.getLogger("outLog"), Level.ERROR)));
我是这么写的:
import java.io.PrintStream;
import LoggingOutputStream.LoggingOutputStream;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
public class UseLoggingOutputStream {
public void SetErr() {
System.setErr(new PrintStream(new LoggingOutputStream(Logger.getLogger("outLog"), Level.ERROR)));
}
}
一个重要的细节是LoggingOutPutstream构造函数接受2个输入,但是链接中的作者使用3个输入调用它,这会产生一个错误。我删除了"系统"。参数,文件编译成功。
然后对这两个类进行jar并将jar文件复制到tomcat5/common/lib文件夹中。最后,我修改了log4j。属性文件与从链接中指定的内容:
log4j.logger.outLog=error, out_log
log4j.appender.out_log=org.apache.log4j.RollingFileAppender
log4j.appender.out_log.file=/logs/error.log
log4j.appender.out_log.MaxFileSize=10MB
log4j.appender.out_log.threshold=error
我启动了Apache Tomcat5服务,但在logs文件夹中没有看到error.log。我错过什么了吗?还有其他人成功地做到了吗?
我将真诚地感谢任何建议。谢谢你。
问题:您正在使用绝对路径/logs/error.log
您需要找到Tomcat目录。简单如下:log4j.appender.out_log.file=${catalina.home}/logs/error.log
有点过时,但对其他人仍然有帮助:)
我也遇到过这个问题,我似乎不明白为什么它什么都不写。我甚至尝试直接写入控制台,但没有任何输出。最后,我查找了PrintStream.class
,发现您必须通过boolean
来自动刷新字节,如下所示:
System.setErr(new PrintStream(new LoggingOutputStream(Logger.getLogger("outLog"), Level.ERROR), true));
这让它为我工作。希望能有所帮助!