java 日志中打印异常信息

本文介绍了一种在Java程序中捕获并记录异常信息到日志的有效方法,通过使用ByteArrayOutputStream和PrintStream,可以将e.printStackTrace()的输出转换为字符串形式,便于进一步的日志管理和错误追踪。

java程序中 执行遇到的异常,通过e.printStackTrace(); 会打印在控制台。那怎么将异常信息e.printStackTrace();打印到日志中呢。

百度到了一位大神博主解决了这一问题:https://blog.youkuaiyun.com/hongweigg/article/details/18313461

ByteArrayOutputStream baos = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(baos));
String exception = baos.toString();
LOGGER.error("异常信息为:" + exception);

通过文件流来保存异常信息。

Java打印异常日志的规范如下: - **使用日志框架**:不能直接使用日志系统(Log4j、Logback)中的 API,而是使用日志框架 SLF4J 中的 API。项目尽可能使用 log4j2 或者 logback,并且使用 slf4j 接口打印日志,示例代码如下: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; private static final Logger logger = LoggerFactory.getLogger(Abc.class); ``` [^1][^4] - **避免重复打印**:不要记录了异常,又抛出异常,避免重复打印日志。例如反例 `log.error("IO exception", e); throw new MyException(e);` 会把栈信息打印两次,不要同时使用这种方式记录日志和抛异常 [^1][^2]。 - **打印完整堆栈**:应该使用日志记录框架,如 logback 或 log4j,来打印异常信息,确保异常日志打印完整堆栈。示例代码如下: ```java try { // 业务代码处理 } catch (Exception e) { log.error("An error occurred:", e); } ``` [^3] - **不要使用 `e.printStackTrace()`**:禁止使用 `e.printStackTrace()`,异常日志不要只打一半,要输出全部错误信息 [^1]。 - **选择合适日志级别**:日志要分级别打印,对于异常日志,通常使用 `error` 级别,且必须要打印上下文信息,方便查找问题。不同日志级别适用场景如下: - `trace`:跟踪日志,与 `debug` 差别不大。 - `debug`:调试问题使用,一定要打印出输入、输出数据。 - `info`:打印程序运行信息,启动信息等。 - `warn`:打印一些警告信息,比如参数校验错误等等。 - `error`:打印程序错误信息,必须要打印上下文信息,方便查找问题。 - `fatal`:重大灾难信息,比如数据库无法连接等需要立即处理的问题。 - `bussiness`:打印重要业务的日志,比如抢购成功、订单创建成功的相关信息、删除用户等 [^4]。 - **使用参数占位**:建议使用参数占位 `{}`,而不是用 `+` 拼接 [^1]。 - **异步输出日志**:建议使用异步的方式来输出日志 [^1]。 - **日志文件分离**:日志文件分开打印,便于查看和抓取日志,如 `.debug.log`、`.info.log`、`.warn.log`、`.error.log`、`.biz.log` [^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值