代码之家  ›  专栏  ›  技术社区  ›  Phillip B Oldham

如何从FOP禁用strerr日志记录输出?

  •  7
  • Phillip B Oldham  · 技术社区  · 16 年前

    如何禁用FOP在处理FO文件时自动生成的日志输出(通常发送到stderr)?

    我试着把 log4j.properties 类路径中的文件,更改 org.apache.fop 但这并不奏效。

    4 回复  |  直到 16 年前
        1
  •  7
  •   PhillyNJ    12 年前

    这可能很晚了,但在1.1版中,您可以创建一个实现 EventListener 在里面 processEvent 你可以忽略任何你不想看到的信息。

    从…起 FOP Docs :

    import org.apache.fop.events.Event;
    import org.apache.fop.events.EventFormatter;
    import org.apache.fop.events.EventListener;
    import org.apache.fop.events.model.EventSeverity;
    
    /** A simple event listener that writes the events to stdout and stderr. */
    public class SysOutEventListener implements EventListener {
    
        /** {@inheritDoc} */
        public void processEvent(Event event) {
            String msg = EventFormatter.format(event);
            EventSeverity severity = event.getSeverity();
            if (severity == EventSeverity.INFO) {
                System.out.println("[INFO ] " + msg);
            } else if (severity == EventSeverity.WARN) {
                System.out.println("[WARN ] " + msg);
            } else if (severity == EventSeverity.ERROR) {
                System.err.println("[ERROR] " + msg);
            } else if (severity == EventSeverity.FATAL) {
                System.err.println("[FATAL] " + msg);
            } else {
                assert false;
            }
        }
    }
    

    用法:

    StreamSource strm = new StreamSource(new File(fo));
    OutputStream outStream = new BufferedOutputStream(new FileOutputStream(new File(pdfName)));
    Fop fop = _fopFactory.newFop(org.apache.xmlgraphics.util.MimeConstants.__Fields.MIME_PDF, outStream);
    FOUserAgent foUserAgent = fop.getUserAgent();
    foUserAgent.getEventBroadcaster().addEventListener(new SysOutEventListener());
    
        2
  •  2
  •   slartidan    15 年前

    我在fop文档中发现了一个提示: http://xmlgraphics.apache.org/fop/0.95/embedding.html#basic-logging 说“我们换了[…]去雅加达公地 log4j.properties 可能没有效果,因为他们使用的是commons日志。

    这在我的情况下有效:

    <logger name="org.apache.fop">
        <level value="info" />
        <appender-ref ref="logfile" />
        <appender-ref ref="stdout" />
    </logger>
    

    检查您的commons日志记录配置,发现过程是否可以找到log4j( http://commons.apache.org/logging/guide.html#Configuration )

        3
  •  1
  •   joycollector    13 年前

    你可以这样做:

    org.apache.commons.logging.impl.Log4JLogger log = (org.apache.commons.logging.impl.Log4JLogger) LogFactory.getLog("org.apache.fop");
    
    log.getLogger().setLevel(org.apache.log4j.Level.FATAL);
    
        4
  •  0
  •   Yaneeve    16 年前

    不知道FOP,但您可以随时使用以下代码将STDERR重定向到您喜欢的任何地方:

    File errDumpFile = new File("Path\to\a\File")
    FileOutputStream fos = new FileOutputStream(errDumpFile);
    PrintStream ps = new PrintStream(fos);
    System.setErr(ps);
    

    注意:您不必重定向到文件 PrintStream 你可以吃任何东西吗 OutputStream .