2016-01-19 2 views
0

У меня есть старый проект, который делаетЕсть ли способ зарегистрировать System.err в файле в журнале?

catch (Exception e) { 
e.printStacktrace(); 
} 

повсюду. Теперь я хочу записать эти стеки в файл, используя Logback. Я не мог найти какое-либо решение в Интернете.

Есть ли способ в журнале, чтобы записывать операторы System.Error в файл? Я пробовал следующее, но не работает, он только записывает журналы STDOUT в файл.

Если бы кто-нибудь мог помочь, было бы здорово, спасибо!

def DEFAULT_PATTERN = "%d [%thread] %-5level %logger - %msg%n" 

appender("STDOUT", ConsoleAppender) { 
    encoder(PatternLayoutEncoder) { 
     pattern = DEFAULT_PATTERN 
     charset = Charset.forName("UTF-8") 
    } 
} 

appender("SYSERR", ConsoleAppender) { 
    encoder(PatternLayoutEncoder) { 
     pattern = DEFAULT_PATTERN 
     charset = Charset.forName("UTF-8") 
    } 
    target = "System.err" 
} 

appender("FILE", RollingFileAppender) { 
    file = "logs/stdout.log" 
    append = true 
    encoder(PatternLayoutEncoder) { 
    pattern = DEFAULT_PATTERN 
    charset = Charset.forName("UTF-8") 
    } 
    filter(ch.qos.logback.classic.filter.ThresholdFilter) { 
    level = INFO 
    } 
    rollingPolicy(ch.qos.logback.core.rolling.TimeBasedRollingPolicy) { 
    fileNamePattern = "logs/stdout-%d{yyyy-MM-dd}.%i.log" 
    maxHistory = 10 
    timeBasedFileNamingAndTriggeringPolicy(ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP) { 
     maxFileSize = "1MB" 
    } 
    } 
} 

appender("ERROR", RollingFileAppender) { 
    file = "logs/errors.log" 
    append = true 
    encoder(PatternLayoutEncoder) { 
    pattern = DEFAULT_PATTERN 
    charset = Charset.forName("UTF-8") 
    } 
    filter(ch.qos.logback.classic.filter.ThresholdFilter) { 
    level = ERROR 
    } 
    rollingPolicy(ch.qos.logback.core.rolling.TimeBasedRollingPolicy) { 
    fileNamePattern = "logs/errors-%d{yyyy-MM-dd}.%i.log" 
    maxHistory = 10 
    timeBasedFileNamingAndTriggeringPolicy(ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP) { 
     maxFileSize = "1MB" 
    } 
    } 
} 

/* Make Spring less verbose. */ 
//logger("org.springframework", INFO) 
//logger("org.springframework.web.servlet", INFO) 

/* Quieten Thymeleaf. */ 
//logger("org.thymeleaf", INFO) 

/* Jetty can be really noisy on a shaded jar. */ 
//logger("org.eclipse.jetty.webapp.WebAppClassLoader", INFO) 
//logger("org.eclipse.jetty.util.resource.JarResource", INFO) 

/* Quieten Jetty in general. */ 
//logger("org.eclipse", DEBUG); 

def appenders = [] 
appenders.add("STDOUT") 
appenders.add("SYSERR") 
appenders.add("FILE") 
appenders.add("ERROR") 

root(INFO, appenders) 
+0

Что вы пытаетесь сделать, чувствует себя очень плохо ... но если это ваша фантазия, это [ blog post] (https://blogs.oracle.com/nickstephen/entry/java_redirecting_system_out_and) из oracle подскажет вам, как это сделать (хотя для платформы ведения журналов Java, но нетрудно переносить это на logback). Вам в основном нужно заменить System.err специальным PrintStream, который перенаправляет вызовы на logback. Или вы могли бы заменить строку в своем проекте? – Augusto

+0

Я знаю, что это плохо ... Это просто очень старый проект, который нуждается в * некоторых * поддержании и регистрации, поэтому я хотел посмотреть, есть ли простой способ в Logback: ( – littlejedi

+0

Я понимаю :) - Там тонны программы там написано много лет назад с «разными» практиками. Пожалуйста, проверьте сообщение в блоге, которое я связал, поскольку оно должно отправить вас в правильном направлении. – Augusto

ответ

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