log4j:每个Appender的属性列表?

时间:2010-11-24 16:12:28

标签: java swing log4j jtextarea appender

任务:

我正在尝试配置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的有效属性集?

3 个答案:

答案 0 :(得分:2)

为什么你认为WriterAppender有这样的属性?据我所知JavaDocs,它没有这样的属性。也许你把它与ConsoleAppender混淆了?

如果打开相关的JavaDoc /源代码并查找所有JavaBean样式的setter方法,则可以获得每个appender的属性列表。这意味着如果WriterAppender具有target属性,则需要setTarget(...) setter方法。

无论如何,我建议您子类WriterAppender 创建您自己的JTextAreaAppender ,这会将您的自定义OutputStream传递给超类。有关此类子类的示例,请参阅ConsoleAppenderFileAppender

编辑:顺便说一句,因为您最需要将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无法在外部配置文件中配置,因为它没有可配置的选项。该类旨在写入WriterOutputStream,并且无法在基于字符串的配置文件中指定该对象。

如果这不正确,请纠正我并指出我可以找到正确信息的地方。我有点惊讶的是,这个答案并不容易,而且很明显就是这样。