2015-08-25 3 views
0

Я хотел бы записать в файл все исключения (показаны на консоли) в моих проектах maven. Я создаю класс, который реализует UncaughtExceptionHandler и вызывает log4j Logger.error. Это работает в основном проекте maven (где находится основной класс), но не внутри других связанных проектов maven (с зависимостями во всех pom.xml). Возможно, по умолчанию UncaughtExceptionHandler переопределяется Maven, но как я могу заставить его работать?Java UncaughtExceptionHandler + LOG4J + Maven

public static void main(String[] args) throws Exception{ 
     Thread.setDefaultUncaughtExceptionHandler(new DefaultExceptionHandler()); 
} 


public class DefaultExceptionHandler implements UncaughtExceptionHandler{ 

    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultExceptionHandler.class); 

@Override 
public void uncaughtException(Thread thread, Throwable ex) { 
    LOGGER.error("Exception thread: "+thread.getName(), ex); 

} 

}

ответ

1

Вы можете создать экземпляр java.io.PrintStream ниже

public static PrintStream createLoggingProxy(
      final PrintStream realPrintStream) 
    { 
     return new PrintStream(realPrintStream) 
     { 
      public void print(final String string) 
      { 
       logger.info(string); 
      } 

      public void println(final String string) 
      { 
       logger.warn(string); 
      } 
     }; 
    } 

и установить его на соответствующие потоки, как это:

System.setOut(createLoggingProxy(System.out)); 
System.setErr(createLoggingProxy(System.err)); 

где logger является экземпляром org.apache.log4j.Logger

+0

Действительно полезное решение! –