任务:
我正在尝试配置Appender以输出到JTextArea。我相信WriterAppender能够写入OutputStream。我已经将OutputStream子类化为生成JTextAreaOutputStream类,该类当前通过劫持System.out和System.err的输出来填充。
配置文件:
# File appender for the GUI screen
log4j.appender.gui = org.apache.log4j.WriterAppender
log4j.appender.gui.Target=project.gui.GUIView.logWindow //logWindow is the name of my JTextArea
# Root logger option
log4j.rootLogger=INFO, gui
错误:
log4j:WARN No such property [target] in org.apache.log4j.WriterAppender.
问题:
任何人都知道我在哪里可以识别每个Appender的有效属性集?
答案 0 :(得分:2)
为什么你认为WriterAppender有这样的属性?据我所知JavaDocs,它没有这样的属性。也许你把它与ConsoleAppender混淆了?
如果打开相关的JavaDoc /源代码并查找所有JavaBean样式的setter方法,则可以获得每个appender的属性列表。这意味着如果WriterAppender
具有target
属性,则需要setTarget(...)
setter方法。
无论如何,我建议您子类WriterAppender
和创建您自己的JTextAreaAppender
,这会将您的自定义OutputStream
传递给超类。有关此类子类的示例,请参阅ConsoleAppender和FileAppender。
编辑:顺便说一句,因为您最需要将JTextArea
的引用传递给JTextAreaAppender
,我建议您以编程方式配置log4j。或者至少在引用JTextArea
后以编程方式添加自定义appender。
或者,更好的是,您可以通过属性文件对其进行配置,但保留初始JTextArea
引用为空 - 在您的应用程序启动并获得jTextArea
引用后,您可以通过编程方式查看所有内容log4j appender并将引用传递给您的自定义JTextAreaAppender
。
答案 1 :(得分:2)
以下是我配置WriterAppender的方法:
在 log4j.properties :
中log4j.rootLogger=INFO, ConsoleAppenderInstance,FileAppenderInstance, WriterAppenderInstance
...
log4j.appender.WriterAppenderInstance=org.apache.log4j.WriterAppender
log4j.appender.WriterAppenderInstance.layout=org.apache.log4j.PatternLayout
log4j.appender.WriterAppenderInstance.layout.ConversionPattern=%m%n
在java代码中:
StringWriter writer = new StringWriter();
Logger root = Logger.getRootLogger();
WriterAppender app = (WriterAppender)root.getAppender("WriterAppenderInstance");
app.setWriter(writer);
...
writer.toString()
至于可用的属性,我猜这里的所有内容都以set
开头:http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/WriterAppender.html(和子类中)
答案 2 :(得分:0)
我知道这已经很老了,但我只想跟进这个问题,因为我整个上午都在努力寻找相同的信息。
据我所知,log4j WriterAppender无法在外部配置文件中配置,因为它没有可配置的选项。该类旨在写入Writer
或OutputStream
,并且无法在基于字符串的配置文件中指定该对象。
如果这不正确,请纠正我并指出我可以找到正确信息的地方。我有点惊讶的是,这个答案并不容易,而且很明显就是这样。