我正在使用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后,您也可以对答案进行投票。