2016-08-26 6 views
4

Как я могу использовать Logback для захвата сообщений System.out в программе Java?Как перенаправить System.out в файл журнала с помощью журнала?

Например, я хотел бы использовать этот код:

System.out.println("test: console out to file instead"); 

... и захватить его вывода в файл.

Можно ли это сделать с помощью файла конфигурации logback.xml?

+0

http://fahdshariff.blogspot.no/2010/10/redirect-stdout-to-logger.html –

ответ

4

Там немного баночка, что делает это для вас: http://projects.lidalia.org.uk/sysout-over-slf4j/index.html

Пожалуйста, прочитайте FAQ: http://projects.lidalia.org.uk/sysout-over-slf4j/faq.html - Если вы используете это модуль и настроить Logback для вывода на стандартный вывод, вы получите поток StackOverflowError с: D

Если вы хотите сделать это самостоятельно, вам нужно заменить System.out и системы .err с пользовательским PrintWriter (? Я не могу полностью запомнить имя класса). Этому настраиваемому PrintWriter необходимо переадресовать вызовы на логический вызов полу-интеллектуальным способом, так как печатные наречия могут также печатать символ по символу, а не по строке.

+0

Я подозревал, что я ошибался, пытаясь перенаправить стандартный вывод вместо создания объектов регистратора в коде. Если для этого требуется фляга, то я подозреваю, что нет базовой конфигурации для logback, xml для достижения моей цели. – Matthew

+1

Нет необходимости в банке, вы можете просто установить System.out и System.err в свой код. Просто взгляните на методы класса System. Единственное, что вам нужно сделать, это передать в OutputStream, который выводит в файл (например, FileOutputStream) – n247s

+1

@Matthew Как говорится в главной странице проекта, это «взломать» для очень старого кода или плохих библиотек. Вы никогда не должны создавать новое приложение, полагаясь на что-то вроде этого. Код там не супер сложный. – Augusto

-1

Да, вы можете сделать это с некоторой конфигурацией, подобной ..

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> 
    <target>System.out</target> 
    <filter class="com.foo.StdOutFilter" /> 
    ... 
</appender> 
<logger name="mylogger" level="debug"> 
    <appender-ref ref="stdout" /> 
</logger> 
+3

Это вход в консоль. Вопрос противоположный тому, что на самом деле, захват System.out и запись его в файл. – rustyx

Смежные вопросы