【问题标题】:Java UncaughtExceptionHandler + LOG4J + MavenJava UncaughtExceptionHandler + LOG4J + Maven
【发布时间】:2015-08-25 09:49:52
【问题描述】:

我想将我的 maven 项目中的所有异常(显示在控制台中)记录到一个文件中。我创建了一个实现 UncaughtExceptionHandler 的类并调用 log4j Logger.error。这适用于主 maven 项目(Main 类在哪里),但不适用于连接的其他 maven 项目(所有 pom.xml 中的依赖项)。也许默认的 UncaughtExceptionHandler 被 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);

}

}

【问题讨论】:

    标签: java maven exception log4j


    【解决方案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));
    

    其中loggerorg.apache.log4j.Logger 的一个实例

    【讨论】:

    • 非常有用的解决方案!
    猜你喜欢
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    相关资源
    最近更新 更多