【问题标题】:log4j: List of properties for each Appender?log4j:每个 Appender 的属性列表?
【发布时间】:2011-05-15 05:03:48
【问题描述】:

任务:

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

【问题讨论】:

    标签: java swing log4j jtextarea appender


    【解决方案1】:

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

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

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

    编辑:顺便说一句,由于您很可能需要将对 JTextArea 的引用传递给您的 JTextAreaAppender,因此我建议您以编程方式配置 log4j。或者至少在您引用JTextArea 之后,以编程方式添加您的自定义附加程序。

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

    【讨论】:

    • 这是我的观点尼姆。我通过从不同类型的 Appender 中窃取并交叉手指完全猜到了属性名称。 JavaDoc 似乎只涵盖方法名称而不是可以设置的属性?
    • 这些属性并没有什么神奇之处——它们在 JavaDocs 中都是可见的,以 JavaBean“setter 方法”的形式出现。 WriterAppender 没有“target”属性,因为 WriterAppender 没有对应的“setTarget(String)”方法。
    • 这是否回答了您的问题?如果是,请接受我的回答 ;-) stackoverflow.com/faq#howtoask
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      这是我配置 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(和子类)

      【讨论】:

        猜你喜欢
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-15
        • 2018-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多