stderr java_如何使用Log4j将stdout和stderr写入/捕获到文件中,以及如何使用Windows和Tomcat 5.5(Java)?...

我正在使用Windows 2008 R2和Apache Tomcat 5.5,供您参考。

可以通过"记录"选项卡->"重定向标准输出"和"重定向标准错误"文本框,通过Apache Tomcat属性自动记录STDOUT和STDERR。

但是我想通过log4j来控制它。

我正在尝试利用ConsoleAppender和TimeAndSizeRollingAppender类来转换通常由Apache Tomcat的固有日志记录控制的内容。

基本上,但是Tomcat将stdout和stderr重定向到一个文件,我想使用log4j和log4j.properties文件执行相同的操作。

我在这个网站上做了一些挖掘,并在其他地方进行了类似的挖掘(将log4j将stdout重定向到DailyRollingFileAppender)和这个(http://sysgears.com/articles/how-to-redirect-stdout-and-stderr-writing-to-a -log4j-appender#comment-749),但我遇到了一些基本问题:

如何编译这些类中的任何一个?类路径应该是什么?我尝试从sysgears链接编译该类,但是它返回了7个错误,例如找不到符号类Logger和符号类OutputStream。

编译后,特别是从sysgears链接进行编译后,如何使用该类?它声明要使用该类,只需编写:

System.setErr(new PrintStream(new LoggingOutputStream(

System.err,Logger.getLogger(" outLog"),Level.ERROR)));

很好,但是我在哪里写呢?在单独的文件中? Tomcat属性?

我将不胜感激任何帮助。

非常感谢您的宝贵时间。

更新:

这是我完整的log4j.properties文件:

log4j.rootLogger=INFO, CATALINA, LOCALHOST, MANAGER, HOST-MANAGER, ADMIN, CONSOLE

# Define all the appenders

log4j.appender.CATALINA=org.apache.log4j.appender.TimeAndSizeRollingAppender

log4j.appender.CATALINA.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-      5.5.28/logs/catalina.log

log4j.appender.CATALINA.Threshold=DEBUG

log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd-HH-mm

log4j.appender.CATALINA.layout=org.apache.log4j.PatternLayout

log4j.appender.CATALINA.MaxFileSize=20KB

log4j.appender.CATALINA.DateRollEnforced=true

log4j.appender.CATALINA.MaxRollFileCount=100

log4j.appender.CATALINA.ScavengeInterval=-1

log4j.appender.CATALINA.BufferedIO=false

log4j.appender.CATALINA.CompressionAlgorithm=ZIP

log4j.appender.CATALINA.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

log4j.appender.LOCALHOST=org.apache.log4j.appender.TimeAndSizeRollingAppender

log4j.appender.LOCALHOST.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-5.5.28/logs/localhost.log

log4j.appender.LOCALHOST.Threshold=DEBUG

log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd-HH-mm

log4j.appender.LOCALHOST.layout=org.apache.log4j.PatternLayout

log4j.appender.LOCALHOST.MaxFileSize=20KB

log4j.appender.LOCALHOST.DateRollEnforced=true

log4j.appender.LOCALHOST.MaxRollFileCount=100

log4j.appender.LOCALHOST.ScavengeInterval=-1

log4j.appender.LOCALHOST.BufferedIO=false

log4j.appender.LOCALHOST.CompressionAlgorithm=ZIP

log4j.appender.LOCALHOST.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

log4j.appender.MANAGER=org.apache.log4j.appender.TimeAndSizeRollingAppender

log4j.appender.MANAGER.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-5.5.28/logs/manager.log

log4j.appender.MANAGER.Threshold=DEBUG

log4j.appender.MANAGER.DatePattern='.'yyyy-MM-dd-HH-mm

log4j.appender.MANAGER.layout=org.apache.log4j.PatternLayout

log4j.appender.MANAGER.MaxFileSize=20KB

log4j.appender.MANAGER.DateRollEnforced=true

log4j.appender.MANAGER.MaxRollFileCount=100

log4j.appender.MANAGER.ScavengeInterval=-1

log4j.appender.MANAGER.BufferedIO=false

log4j.appender.MANAGER.CompressionAlgorithm=ZIP

log4j.appender.MANAGER.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

log4j.appender.HOST-MANAGER=org.apache.log4j.appender.TimeAndSizeRollingAppender

log4j.appender.HOST-MANAGER.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-5.5.28/logs/host-manager.log

log4j.appender.HOST-MANAGER.Threshold=DEBUG

log4j.appender.HOST-MANAGER.DatePattern='.'yyyy-MM-dd-HH-mm

log4j.appender.HOST-MANAGER.layout=org.apache.log4j.PatternLayout

log4j.appender.HOST-MANAGER.MaxFileSize=20KB

log4j.appender.HOST-MANAGER.DateRollEnforced=true

log4j.appender.HOST-MANAGER.MaxRollFileCount=100

log4j.appender.HOST-MANAGER.ScavengeInterval=-1

log4j.appender.HOST-MANAGER.BufferedIO=false

log4j.appender.HOST-MANAGER.CompressionAlgorithm=ZIP

log4j.appender.HOST-MANAGER.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

log4j.appender.ADMIN=org.apache.log4j.appender.TimeAndSizeRollingAppender

log4j.appender.ADMIN.file=D:/Program Files (x86)/Apache Software Foundation/Tomcat-5.5.28/logs/admin.log

log4j.appender.ADMIN.Threshold=DEBUG

log4j.appender.ADMIN.DatePattern='.'yyyy-MM-dd-HH-mm

log4j.appender.ADMIN.layout=org.apache.log4j.PatternLayout

log4j.appender.ADMIN.MaxFileSize=20KB

log4j.appender.ADMIN.DateRollEnforced=true

log4j.appender.ADMIN.MaxRollFileCount=100

log4j.appender.ADMIN.ScavengeInterval=-1

log4j.appender.ADMIN.BufferedIO=false

log4j.appender.ADMIN.CompressionAlgorithm=ZIP

log4j.appender.ADMIN.layout.conversionPattern = %-5p %-23d{ISO8601} [%t] %x: %c{1} - %m%n

# Configure which loggers log to which appenders

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=\

INFO, MANAGER

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=\

INFO, HOST-MANAGER

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin]=\

INFO, ADMIN

只是为了验证我对这个问题的理解,您已经按照文档(tomcat.apache.org/tomcat-5.5-doc/logging.html)中所述用Tomcat配置了Log4J。 只是您没有在日志中得到STDOUT和STDERR,对吗?

对,那是正确的。 我在原始帖子中发布了完整的log4j.properties文件。 我只想使用log4j记录STDOUT和STDERR以记录文件,但是可以做到。 谢谢。

您可以使用附加程序实现此目的:

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Threshold = DEBUG

log4j.appender.stdout.Target   = System.out

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern = %d{ISO8601} %-5p [%F:%L] : %m%n

然后将此追加器与记录器一起使用,例如:

log4j.rootLogger = DEBUG, stdout

当然,您可以将上面的Target与System.err一起使用

希望能帮助到你。

干杯,

基督教

您好,谢谢您的帮助。不幸的是,这并没有提供我正在寻找的解决方案。使用ConsoleAppender,它将文件保存在哪里?我想在stdout和stderr上使用过渡来控制其大小和备份。我被卡在sysgear类上,无法与log4j.properties一起使用。谢谢。

1) How do I compile any of these classes? What should be the classpath? I tried compiling the class from the sysgears link but it returned 7 errors such as unable to find symbol Class Logger and symbol Class OutputStream.

您需要在类路径上放置log4j jar,并在文件顶部导入正确的类。 就像是,

import java.io.PrintStream;

import java.io.OutputStream;

import org.apache.log4j.Logger;

好的谢谢。正如您所说,我将这些类导入文件顶部,并直接指定了类路径。这是我键入的内容(请注意,命令行提示符相对于类路径的文件夹)->" javac -cp log4j-1.2.16.jar LoggingOutputStream.java"(不带引号)。我遇到了4个错误,所有这些都指向找不到符号Class Level和Class IOException。我的完整导入如下所示:import java.io.PrintStream;导入java.io.OutputStream;导入java.io.IOException;导入java.util.logging.Level;导入java.util.logging.Logger;

找到所有缺少的导入,然后导入。 IOException是java.io.IOException,级别是org.apache.log4j.Level

谢谢,我发现了丢失的导入,并且编译成功。太好了,谢谢。 Im失去的唯一其他窍门是如何将类与log4j.properties文件结合使用(请参阅上面我编辑过的原始文章)。在sysgears链接中,它提到编写几行代码来使用其类,但未说明将代码写入何处?我不知道他们是否暗示要使用Tomcat或将其编写为单独的.java文件并进行编译,或进行其他操作。我不知道。一如既往,感谢您的任何帮助。

@ user717236:如果您发现他的帖子有用,至少像Ive那样有礼貌地对其进行投票。

投票?我不明白。我是发布问题的人,我发现所有答案都很有帮助,谢谢。

如果您发布问题,则可以接受答案。信誉> 15后,您也可以对答案进行投票。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值