在error日志打印异常

在日志中打印异常,经常会看到以下的写法:

logger.error(e.getMessage());

或者是:

e.printStackTrace();

这两种其实都不太好。
e.getMessage只会打印出异常的类型,但是不会显示出错的异常方法堆栈,无法在日志中找出错误代码
而e.printStackTrace();则是将异常打印到控制台,并不是打印到error日志中。

解决方法

看logger.error源码,可以发现:

public void error(String msg, Throwable t);

public void error(String msg);

如果想在error日志中打印异常,可以使用第一种。

    logger.error(“xxx出错”,e);   //第二个参数是Exception

注意,方法有两个参数,通过逗号隔开,而不是用加号连接。
也就是说,并不是logger.error(“xxx出错:”+e) 或 logger.error(e) 或logger.error(e.getMessage());

示例如下:

try{

}catch(Exception e) {
        logger.error(“xxx出错:”,e)
}

参考资料:
https://blog.csdn.net/heweimingming/article/details/76423186

原文地址:https://www.cnblogs.com/expiator/p/11421596.html

时间: 2024-11-05 20:50:34

在error日志打印异常的相关文章

日志如何打印异常堆栈信息。

package com.doctor.slf4j; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 如何打印异常堆栈信息. * @author doctor * * @time 2014年12月11日 上午9:49:00 */ public class LogThrowableRule { private final Logger log = LoggerFactory.g

rsyslog日志打印到控制台的异常

场景描述:Linux系统启动之后,没有进入到登录界面之前,屏幕刷拉拉一大片的HTTP日志打印,吓了我一大跳,这又是什么系统异常吗?这些日志不是应该写入到/var/log/messages文件中吗?毕竟HTTP服务程序调用的是syslog函数接口!!另外一件古怪的事情是,关闭系统的时候,日志也打印到了控制台,这正是菲尼索斯的事情. 解开谜团:开机打印日志到控制台是因为rsyslog并没有启动,HTTP服务程序只能够把日志输出到控制台上,说明没有把服务的顺序调整好,所以我们应该在HTTP服务程序的依

python日志打印和写入并发简易版本实现

大家一般都用logging日志打印,但logging是线程安全的,多进程也有很多介绍,引入一些文件锁,对logging做好配置,能过支持. 但通过测试,发现多进程时还是容易出现重复写入文件或者打印正常漏写入文件的问题. 我的日志需求比较简单,能够区分文件,正确的写入日志文件. 引入文件锁:日志写入函数封装到一个操作_Logger类中: 日志名称和写入级别封装到一个业务类Logger中. 本范例基于python3实现.本范例20个进程并发,分别写入3个文件,每s每个文件写入超过100行数据,日志文

java中日志打印

目录 一.预先判断日志级别 二.避免无效日志打印 三.区别对待错误日志 四.保证记录完整内容 打印日志,要注意下面4点. 一.预先判断日志级别 对DEBUG.INFO级别的日志,必须使用条件输出或者使用占位符的方式打印.该约定综合考虑了程序的运行效率和日志打印需求. 先来看一个反例: log.debug("输入参数信息id=" + id + ",obj=" + obj); 如果在某个配置了打印级别为WARN的应用中,按照上面代码打印DEBUG级别的日志,那么该日志不

springboot配置aop切面日志打印

一.SpringBoot Aop说明 1. Aop AOP(Aspect-Oriented Programming,面向切面编程),它利用一种”横切”的技术,将那些多个类的共同行为封装到一个可重用的模块.便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性. 2. AOP相关概念: Aspect(切面):声明类似于Java中的类声明,在Aspect中会包含一些Pointcut及相应的Advice. Joint point(连接点):表示在程序中明确定义的点.包括方法的调

项目log日志打印

①使用到的jar包: 大概是这几个,具体我也不知道是哪一个,下次使用的时候自己测试下. commons-logging-1.2.jar commons-discovery-0.5.jar log4j-1.2.17.jar ②log4j.properties log4j.rootLogger=DEBUG,CONSOLE,A log4j.addivity.org.apache=false log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

error日志

2016/06/15 微信调核心时通用意外险 2016-06-15 11:44:23,771>>INFO >> com.isoftstone.core.service.common.impl.ConnectToV5ByJsonImpl.invoke(ConnectToV5ByJsonImpl.java:268) - [请求报文]: <?xml version="1.0" encoding="UTF-8"?> <packet

ESB后台error日志

本地tomcat没异常 开发环境,生产环境 ESB使用axis2.jar 后台会有错误,但不影响所有流程,该错误源自common.log的error,在捕捉异常后,并未往外继续抛 [ESB 打印] 接口的请求报文是: <?xml version="1.0" encoding="UTF-8"?><PACKET type="REQUEST" version="1.0"><Config><X

slf4j-api-1.7.5日志打印实验

以下一段话来自:百度百科 如果你开发的是类库或者嵌入式组件,那么就应该考虑采用SLF4J,因为不可能影响最终用户选择哪种日志系统.在另一方面,如果是一个简单或者独立的应用,确定只有一种日志系统,那么就没有使用SLF4J的必要.假设你打算将你使用log4j的产品卖给要求使用JDK 1.4 Logging的用户时,面对成千上万的log4j调用的修改,相信这绝对不是一件轻松的事情.但是如果开始便使用SLF4J,那么这种转换将是非常轻松的事情. 今天来测试一下slf4j的使用和它的魅力. 一般现在jav