首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Windows (Java,NetBeans)的Tomcat5中运行log4j的定制类/jar需要帮助

在Windows (Java,NetBeans)的Tomcat5中运行log4j的定制类/jar需要帮助
EN

Stack Overflow用户
提问于 2011-04-26 03:22:16
回答 2查看 233关注 0票数 1

我正在尝试实现一个为log4j编写的自定义类,并将其与Windows上的Tomcat5结合使用。现在,请记住,tomcat5和log4j都已正确安装和配置,并且工作正常。然而,添加这个类并不会产生预期的结果,这就是本文的重点。我从下面的链接发现了这个类:http://sysgears.com/articles/how-to-redirect-stdout-and-stderr-writing-to-a-log4j-appender#comment-749)。

我编写了这个类,并将以下内容放在类声明的上方:

代码语言:javascript
复制
package LoggingOutputStream;

import java.io.PrintStream;
import java.io.OutputStream;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;  

然后,我成功地编译了它。然后,链接声明要使用这个类,写道:

代码语言:javascript
复制
System.setErr(new PrintStream(new LoggingOutputStream(
    System.err, Logger.getLogger("outLog"), Level.ERROR)));

下面是我写的内容:

代码语言:javascript
复制
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个输入调用它,这会产生一个错误。我删除了"System.err“参数,文件编译成功。

然后,我对这两个类进行jar压缩,并将jar文件复制到tomcat5/common/lib文件夹中。最后,我使用链接中指定的内容修改了log4j.properties文件:

代码语言:javascript
复制
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文件夹中没有看到error.log。我是不是遗漏了什么?还有没有其他人让它成功地工作过?

如果有任何建议,我将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-09-13 07:03:34

问题:您正在使用绝对路径/logs/error.log

您需要找到Tomcat目录。像下面这样简单:log4j.appender.out_log.file=${catalina.home}/logs/error.log

票数 0
EN

Stack Overflow用户

发布于 2013-03-15 12:31:32

有点过时了,但对其他一些人仍然有帮助:)

我也有这个问题,我似乎不明白为什么它根本不写任何东西。我甚至还尝试直接写入控制台,但没有任何输出。最后,我查找了PrintStream.class,发现您必须传递一个boolean来自动刷新字节,如下所示:

代码语言:javascript
复制
System.setErr(new PrintStream(new LoggingOutputStream(Logger.getLogger("outLog"), Level.ERROR), true));

这让它为我工作了。希望它能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5782226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档