Java UncaughtExceptionHandler + LOG4J + Maven

标签 java maven exception log4j

我想将我的 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.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的实例

关于Java UncaughtExceptionHandler + LOG4J + Maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32200777/

相关文章:

maven - 如何将 openshift 默认 maven 版本从 3.0.4 升级到 3.1.0?

jQuery 加载带有图像的 HTML 将错误呈现到控制台

Android "java.lang.RuntimeException: Unable to instantiate activity"异常

java - Android 按钮 - 单击时触发定时事件

java - 在这种情况下,拥有公共(public) Java 类成员会是不好的做法吗?

java - Java 中的 Trie 数据结构 - 电话簿应用程序

java - 项目内的逻辑设计

java - 是否可以只运行一个测试类(利用 PowerMock 和 Mockito)?

java - 如何在运行时找出一个类的来源?

exception - openNI干扰cvCreateCameraCapture()