2

任务:

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

4

3 回答 3

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(以及子类)

于 2012-09-17T15:09:04.120 回答
2

为什么你认为WriterAppender有这样的属性?据我从JavaDocs中可以看出,它没有这样的属性。也许您将它与ConsoleAppender混淆了?

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

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

编辑:顺便说一句,由于您很可能需要传递JTextArea对您的引用JTextAreaAppender,我建议您以编程方式配置 log4j。或者至少在您引用JTextArea.

或者,更好的是,您可以通过属性文件对其进行配置,但将初始JTextArea引用保留为空 - 在您的应用程序启动并获得jTextArea引用之后,您可以通过编程方式查看所有 log4j 附加程序并将引用传递给您的 custom JTextAreaAppender

于 2010-11-24T16:27:21.983 回答
0

我知道这已经很老了,但我只是想跟进这个问题,因为我整个上午都在试图找到相同的信息。

据我所知,log4j WriterAppender 无法在外部配置文件中配置,因为它没有可配置的选项。该类旨在写入WriterOutputStream,并且无法在基于字符串的配置文件中指定该对象。

如果这是不正确的,请纠正我并将我指向可以找到正确信息的地方。我有点惊讶,这个答案并没有更容易和明显地找到它。

于 2012-04-24T19:31:11.670 回答