Как я могу отключить вывод журнала strerr из FOP? - PullRequest
7 голосов
/ 31 марта 2010

Как отключить вывод журнала (обычно отправляемый в stderr), который FOP автоматически генерирует при обработке файла FO?

Я попытался поместить файл log4j.properties в путь к классу, изменив уровень журнала для org.apache.fop, но это не сработало.

Ответы [ 4 ]

7 голосов
/ 19 мая 2014

Это может быть поздно, но в версии 1.1 вы можете создать класс, который реализует EventListenerprocessEvent вы можете просто игнорировать любые сообщения, которые вы не хотите видеть.

Из Документов FOP :

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 голосов
/ 19 июля 2011

Я нашел подсказку в документации fop: http://xmlgraphics.apache.org/fop/0.95/embedding.html#basic-logging, говорящую "Мы перешли [...] на регистрацию в Джакарте Commons". Ваши log4j.properties, вероятно, не будут иметь никакого эффекта, потому что они используют ведение журнала.

Это работает в моем случае:

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

Проверьте конфигурацию регистрации вашего общего ресурса, может ли процесс обнаружения найти log4j ( http://commons.apache.org/logging/guide.html#Configuration)

1 голос
/ 24 января 2013

Вы можете сделать что-то вроде этого:

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);
0 голосов
/ 31 марта 2010

Не знаю 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.

...