logger.error()打印异常堆栈信息

本文讲解了如何在Java中正确地使用logger.error()方法来记录异常信息,对比了正确的做法和常见错误,强调了直接传入异常对象的重要性。

大家知道  e.printStackTrace()  可以打印异常堆栈信息 ,那么 logger.error() 怎么输出呢

 正确写法

 try {
        
 } catch (ArgsException e) {
      logger.error("异常",e);
 }

错误写法

      logger.error(e.getMessage());

      logger.error(e.toString());

      logger.error("异常" + e);

 

 

看源码

/**
     * Log a message at the ERROR level.
     *
     * @param msg the message string to be logged
     */
    public void error(String msg);

 

 /**
     * Log an exception (throwable) at the ERROR level with an
     * accompanying message.
     *
     * @param msg the message accompanying the exception
     * @param t   the exception (throwable) to log
     */
    public void error(String msg, Throwable t);

 可以看出如果传入字符串是不会打印异常信息的

 

 

 

 

 

 

 


心到抢票    心到抢票  https://www.xdticket.com/

`logger.exception()` `logger.error()` 都是 Python `logging` 模块中用于记录错误日志的方法,它们在功能上有相似之处,但也存在关键区别。 --- ### 回答问题: #### 相同点: 1. **都属于 ERROR 级别**:两者都会以 `ERROR` 级别记录日志消息。 2. **都需要一个消息字符串作为参数**:例如 `"操作失败"`。 3. **都可以被日志处理器(Handler)处理并输出到控制台、文件等目标位置**。 4. **通常用于表示程序中发生了严重问题**。 #### 不同点: | 特性 | `logger.error()` | `logger.exception()` | |------|------------------|------------------------| | **是否自动包含异常堆栈(traceback)** | ❌ 默认不包含 | ✅ 自动包含当前异常的 traceback | | **使用场景** | 一般性错误记录 | 在 `except` 块中捕获异常后记录详细错误信息 | | **内部实现** | `logger.error(msg)` | 等价于 `logger.error(msg, exc_info=True)` | | **是否依赖异常上下文** | 否 | 是 —— 必须在 `except` 块中调用才有效果 | | **能否手动控制 traceback 输出** | 可通过 `exc_info=True/False` 控制 | 固定为 `exc_info=True` | --- ### 解释: #### 示例对比: ```python import logging logging.basicConfig( level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s\n%(exc_info)s' ) logger = logging.getLogger(__name__) try: 1 / 0 except Exception: # 使用 logger.error() —— 只记录消息,无 traceback logger.error("这是一个普通错误") # 使用 logger.error() + exc_info=True —— 手动添加 traceback logger.error("这是一个带 traceback 的错误", exc_info=True) # 使用 logger.exception() —— 自动包含 traceback(推荐方式) logger.exception("这是一个异常事件") ``` #### 输出结果(简化): ``` 2025-04-05 10:30:00,000 - ERROR - 这是一个普通错误 2025-04-05 10:30:00,001 - ERROR - 这是一个带 traceback 的错误 Traceback (most recent call last): File "example.py", line 8, in <module> 1 / 0 ZeroDivisionError: division by zero 2025-04-05 10:30:00,002 - ERROR - 这是一个异常事件 Traceback (most recent call last): File "example.py", line 8, in <module> 1 / 0 ZeroDivisionError: division by zero ``` > 注意:第一个 `error()` 调用没有 traceback,而后两个有。 --- ### 总结建议: - ✅ 在普通的错误条件下使用 `logger.error()`。 - ✅ 在捕获异常并需要完整堆栈信息时,优先使用 `logger.exception()`。 - ⚠️ 不要在非 `except` 块中使用 `logger.exception()`,否则可能无法获取正确的 traceback。 - 🛠️ 如果你想灵活控制是否打印 traceback,可以使用 `logger.error(msg, exc_info=...)`。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值