精华内容
下载资源
问答
  • 先来做实验 try { int i = 1 / 0; } catch (Exception e) { e.printStackTrace(); log.error("异常信息: {}", e.toString());... log.error("异常信息: {}", e.getMessage()... log.error("异常信息: ", e.toString

    先来做实验

            try {
                int i = 1 / 0;
            } catch (Exception e) {
                e.printStackTrace();
                log.error("异常信息: {}", e.toString());
                log.error("异常信息: {}", e.getMessage());
                log.error("异常信息: ", e.toString());
                log.error("异常信息: ", e.getMessage());
                log.error("异常信息: ", e);
                log.error("异常信息: " + e);
            }

    e.printStackTrace(); // 能打印完整异常堆栈信息

    java.lang.ArithmeticException: / by zero
    	at com.nokia.wfm.biz.business.wirelessresource.constants.CommonlyConstants.main(CommonlyConstants.java:20)

    log.error("异常信息: {}", e.toString()); // 只打印简单的异常信息,没打印堆栈信息

    23:52:45.352 [main] ERROR com.nokia.wfm.biz.business.wirelessresource.constants.CommonlyConstants - 异常信息: java.lang.ArithmeticException: / by zero
    

    log.error("异常信息: {}", e.getMessage()); // 只打印简单的异常信息,没打印堆栈信息

    23:53:16.133 [main] ERROR com.nokia.wfm.biz.business.wirelessresource.constants.CommonlyConstants - 异常信息: / by zero

    log.error("异常信息: ", e.toString()); // 没打印异常信息

    23:53:44.404 [main] ERROR com.nokia.wfm.biz.business.wirelessresource.constants.CommonlyConstants - 异常信息: 
    

    log.error("异常信息: ", e.getMessage()); // 没打印异常信息

    23:55:57.173 [main] ERROR com.nokia.wfm.biz.business.wirelessresource.constants.CommonlyConstants - 异常信息: 
    

    log.error("异常信息: ", e); // 能打印完整异常堆栈信息

    23:56:37.385 [main] ERROR com.nokia.wfm.biz.business.wirelessresource.constants.CommonlyConstants - 异常信息: 
    java.lang.ArithmeticException: / by zero
    	at com.nokia.wfm.biz.business.wirelessresource.constants.CommonlyConstants.main(CommonlyConstants.java:20)

    log.error("异常信息: " + e); // 只打印简单的异常信息,没打印堆栈信息

    23:57:32.463 [main] ERROR com.nokia.wfm.biz.business.wirelessresource.constants.CommonlyConstants - 异常信息: java.lang.ArithmeticException: / by zero
    

    总结

    发生异常,需要打印日志时。

    如果只需要打印异常信息,不需要打印堆栈信息,则使用:

    log.error("异常信息: {}", e.getMessage()); // 最简单的异常信息

    log.error("异常信息: {}", e.toString()); // e.getMessage() 的基础上,在前面加上打印了异常类

    如果需要打印异常和堆栈信息,方便排查问题,则使用

    e.printStackTrace(); // 能打印完整异常堆栈信息,但听说会引起死锁,所以最好少用

    log.error("异常信息: ", e); // 能打印完整异常堆栈信息,建议使用

    展开全文
  • java异常输出到日志

    千次阅读 2017-08-30 09:16:12
    import java.io.PrintWriter; import java.io.StringWriter; import java.util.logging.Logger;/** * Created by Mr.Jo on 2017/8/30. */class LoggingException extends Exception{ public static Logger logg
    import java.io.PrintWriter;
    import java.io.StringWriter;
    import java.util.logging.Logger;
    
    /**
     * Created by Mr.Jo on 2017/8/30.
     */
    
    class LoggingException extends Exception{
        public static Logger logger=Logger.getLogger("LoggingException");
        public LoggingException(){
            StringWriter trace=new StringWriter();
            printStackTrace(new PrintWriter(trace));
            logger.severe(trace.toString());
        }
    }
    /*
    静态的Logger.getLogger()方法创建了一个String参数相关联的
    Logger对象(通常与错误相关的类名和包名),这个Logger对象会将其
    输出发送到System.err。向Logger写入的最简单的方式就是直接调用与
    日志记录消息的级别相关联的方法,这里使用的是severe()。为了产生
    日志记录消息,我们预捕获异常抛出的栈轨迹,但是
    printStackTrace()不会默认的产生字符串。为了获取字符串,我们需
    要使用重载的printStackTrace()方法,他接受一个
    java.io.StringWriter对象作为参数。如果我们将一个
    java.io.StringWriter对象传递给这个PrintWriter的构造器,那么
    通过调用toString()方法,就可以将输出抽取为一个String。
    */
    public class LoggingExceptions {
        public static void main(String[] args){
            try{
                throw new LoggingException();
            }catch (LoggingException e){
                System.err.println("Caught"+e);
            }
        }
    }
    
    展开全文
  • 当我们使用try..catch方法(如下图所示)捕获到异常堆栈信息时,有时候无法打印出具体的错误信息到日志文件,即无法通过抛出的异常迅速定位问题所在。因此我们需要将异常堆栈信息通过某种方法解析出来,输出完整...

            当我们使用try..catch方法(如下图所示)捕获到异常堆栈信息时,有时候无法打印出具体的错误信息到日志文件,即无法通过抛出的异常迅速定位到问题所在。因此我们需要将异常堆栈信息通过某种方法解析出来,输出完整正确的日志信息。

    try{
        //do something
    }catch(Exception ex){
        ex.printStackTrace();
    }

             工作中经常会碰到以上情况,因此我将以上的解决办法抽象出了工具方法,供大家参考调用。

    public class ExcpUtil {
        //打印异常堆栈信息
        public static String getStackTraceString(Throwable ex){//(Exception ex) {
            StackTraceElement[] traceElements = ex.getStackTrace();
    
            StringBuilder traceBuilder = new StringBuilder();
    
            if (traceElements != null && traceElements.length > 0) {
                for (StackTraceElement traceElement : traceElements) {
                    traceBuilder.append(traceElement.toString());
                    traceBuilder.append("\n");
                }
            }
    
            return traceBuilder.toString();
        }
    
        //构造异常堆栈信息
        public static String buildErrorMessage(Exception ex) {
    
            String result;
            String stackTrace = getStackTraceString(ex);
            String exceptionType = ex.toString();
            String exceptionMessage = ex.getMessage();
    
            result = String.format("%s : %s \r\n %s", exceptionType, exceptionMessage, stackTrace);
    
            return result;
        }
    }

          运用场景:

          Example1:

            try {
                //do something
            } catch (Exception ex) {
                logger.info(ex.toString());
                logger.info("work exception" + ExcpUtil.getStackTraceString(ex));
            }

            Example2:

            try {
                //do something
            } catch (Exception e) {
                throw new CSException (ErrorCode.DEFAULT_ERR,"ctrip_SendEmail exception", ExcpUtil.buildErrorMessage(e));
            }

     

     

     

    展开全文
  • 1、e.printStackTrace()打印在哪里在catch中的e.printStackTrace()将打印到控制台2、e.printStackTrace()打印的内容是什么import org.apache.logging.log4j.Logger;public class ExceptionTest {private static ...

    1、e.printStackTrace()打印在哪里

    在catch中的e.printStackTrace()将打印到控制台

    2、e.printStackTrace()打印的内容是什么

    import org.apache.logging.log4j.Logger;

    public class ExceptionTest {

    private static final Logger logger=LogManager.getLogger();

    public void test() {

    try {

    int i=1/0;

    }catch(Exception e){

    e.printStackTrace();

    }

    }

    public static void main(String[] args) {

    ExceptionTest test= new ExceptionTest();

    test.test();

    }

    }

    输出结果如下:

    java.lang.ArithmeticException: / by zero

    at myProject.ExceptionTest.test(ExceptionTest.java:10)

    at myProject.ExceptionTest.main(ExceptionTest.java:18)

    可见,e.printStackTrace()打印了错误的具体信息,即这个错误出现的位置,便于查找错误源

    3、如果将e.printStackTrace()的信息打印在日志里应该怎么做呢?

    见如下代码:

    package myProject;

    import org.apache.logging.log4j.LogManager;

    import org.apache.logging.log4j.Logger;

    public class ExceptionTest {

    private static final Logger logger=LogManager.getLogger();

    public void test() {

    try {

    int i=1/0;

    }catch(Exception e){

    logger.error(e);

    }

    }

    public static void main(String[] args) {

    ExceptionTest test= new ExceptionTest();

    test.test();

    }

    }

    用logger.error(e);打印日志,输出结果如下:

    19:17:39.753 [main] ERROR myProject.ExceptionTest - java.lang.ArithmeticException: / by zero

    可见,用这种方法打印的日志,只有大概的错误信息,并没有指出报错的代码位置,不便于查找错误。用logger.error(e.getMessage());也是输出这种大概的错误信息。

    再见如下代码:

    package myProject;

    import org.apache.logging.log4j.LogManager;

    import org.apache.logging.log4j.Logger;

    public class ExceptionTest {

    private static final Logger logger=LogManager.getLogger();

    public void test() {

    try {

    int i=1/0;

    }catch(Exception e){

    logger.error("ExceptionTest Exception:",e);

    }

    }

    public static void main(String[] args) {

    ExceptionTest test= new ExceptionTest();

    test.test();

    }

    }

    用logger.error("ExceptionTest Exception:",e);,则输出结果如下:

    9:20:32.948 [main] ERROR myProject.ExceptionTest - ExceptionTest Exception:

    java.lang.ArithmeticException: / by zero

    at myProject.ExceptionTest.test(ExceptionTest.java:10) [classes/:?]

    at myProject.ExceptionTest.main(ExceptionTest.java:18) [classes/:?]

    这和e.printStackTrace()打印的内容大致是相同的。不过最好,还是使用logger.error(e.getMessage(),e)方法来在日志上查看异常的详细结果

    展开全文
  • Java异常日志

    千次阅读 2019-01-31 16:46:42
    来自Alibaba的Java开发手册异常处理日志规约 上一篇Java编程规约二 异常处理 1、【强制】Java 类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch 的方式来处理,比如:...
  • java异常的三种打印方法Whenever exception throw then Throwable class provides various methods to provide exception related information like Exception name, Exception description and Stack Trace, etc. ...
  • 本文不概述如何打印日志,本文概述如何将捕获的异常详细信息打印到日志进行输出,方便定位问题。   首先定义一个函数getTrace如下所示 public static String getTrace(Throwable t) { StringWriter ...
  • Java异常打印输出的常见方法整理

    万次阅读 2018-05-05 11:08:28
    前言Java异常是在Java应用中的警报器,在出现异常的情况下,可以帮助我们程序猿们快速定位问题的类型以及位置。...本文将深入分析在异常日志打印过程中的若干情况,并给出若干的使用建议。1. Java异常E...
  • 打印java异常堆栈信息到日志文件

    千次阅读 2015-05-26 10:08:09
    存在问题:e.printStackTrace();无法直接将堆栈信息,打印到日志文件。 解决办法: ... * @功能说明:在日志文件中,打印异常堆栈 * @param Throwable * @return:String */ public static String Log
  • JAVA使用日志Log打印异常信息

    千次阅读 2020-01-15 16:43:44
    JAVA使用日志Log打印异常信息 一、前言 最近公司用上了SonarQube代码检测,提示应该用LOGGER.log(…)代替e.printStackTrace()。 经了解: 通过e.printStackTrace()会调用System.err将错误信息通过流进行打印可能...
  • 日志如何打印异常堆栈信息。

    千次阅读 2021-03-09 17:54:21
    import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/*** 如何打印异常堆栈信息。* @author doctor** @time 2014年12月11日 上午9:49:00*/public class LogThrowableRule {p...
  • java.lang.NullPointerException: null ...原因:发现服务器中日志文件只有异常,但是没有打印堆栈信息,找之前的日志文件发现有完整的堆栈异常信息 这个问题其实是跟JDK5引入的一个新特性有关,...
  • 一直以为是日志系统的功能,今天发现是jvm实现的,参数是:OmitStackTraceInFastThrow,并且只针对特定5种异常开启。 详见:https://www.javajike.com/article/1768.html
  • java 日志打印异常信息

    千次阅读 2019-07-29 14:57:29
    java程序中执行遇到的异常,通过e....打印到日志中呢。 百度了一位大神博主解决了这一问题:https://blog.csdn.net/hongweigg/article/details/18313461 ByteArrayOutputStream baos = new ByteA...
  • 系统core和java虚拟机异常退出日志设置
  • Java 异常 自定义打印内容

    千次阅读 2019-10-27 15:53:45
    背景:在开发中,我们可能会使用自定义异常,但是,这个自定义异常打印日志时,往往打印的内容比较多。 1.自定义异常打印内容 可以看到,虽然我们使用的是自定义异常,但是当抛出时,还是会打印出堆栈的全部...
  • 打印Java异常堆栈信息

    千次阅读 2021-02-28 14:50:16
    背景在开发Java应用程序的时候,遇到程序抛异常,我们通常会把抛异常时的运行时环境保存下来(写到日志文件或者在控制台中打印出来)。这样方便后续定位问题。需要记录的运行时环境包含两部分内容:抛异常时的参数信息...
  • 非常详细! 记录java中的异常日志处理.

    千次阅读 多人点赞 2020-08-04 10:55:59
    关于java中的异常是如何操作的, 日志又是如何使用的,这篇文章会给你答案。
  • java异常日志处理规范

    千次阅读 2017-09-14 16:50:57
    1. 【强制】不要捕获 Java 类库中定义的继承自 RuntimeException 的运行时异常类,如: IndexOutOfBoundsException / NullPointerException,这类异常由程序员预检查来规避,保 证程序健壮性。 正例: if
  • 1.当我们在Java遇到异常,却很难根据default打印异常内容来判断问题所在的时候,我们可以用以下的API打印发生异常时堆栈的完整内容。...2.将Java异常的完整堆栈内容打印到log4j日志 异常打印建议:logger.error(
  • 主要介绍了浅谈log4j 不打印异常堆栈,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
  • 在本篇文章里小编给大家整理的是关于SpringBoot打印启动时异常堆栈信息,有需要的朋友们可以学习下。
  • 本文作者:suxingrui ... 版权声明:本文为原创文章,转载请注明出处。 程序开发过程中,我们经常...使用的时候,可能会一个不小心忘记加上try catch或者catch的异常范围不够,而导致出现异常时,未能够捕获异常...
  • 你已经看到了它们,它只是荒谬的方式Java(和默认的Logback)默认打印异常.这个堆栈跟踪:Exception in thread "main" java.lang.NoClassDefFoundError: aa/bb/DDat SOMEWHERE(unknown source)Caused by: java.lang....
  • JAVA异常日志

    千次阅读 2020-12-11 14:39:07
    未捕获异常 Runnable 未捕获异常 @Slf4j public class RunnableDemo implements Runnable{ boolean flag; public RunnableDemo(boolean flag) { this.flag = flag; } @Override public void run() { ...
  • Java程序日志打印规范

    千次阅读 2020-05-02 11:17:04
    日志技术框架一览 JUL:JDK中的日志记录工具,也常称为JDKLog、jdk-logging。 LOG4J1:一个具体的日志实现框架。 LOG4J2:一个具体的日志实现框架,是LOG4J1的下一个版本。 LOGBACK:一个具体的日志实现框架...
  • 作者:琴水玉cnblogs.com/lovesqcc/p/4319594.html在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导。但是在实际中打的错误日志内容...
  • 首先要在方法处抛出 Exception异常 ...日志: 要点: System.getProperty("line.separator") 是用来换行的 通用换行 不限操作系统 如果要用这种记录异常位置的方法,就必须是某...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,449
精华内容 30,579
关键字:

java打印异常到日志

java 订阅