# 错误日志

URL: https://caijiao.org/pingora/error_logging
Source: docs/pingora/error_logging.md
Description: 学习如何配置和使用 Pingora 的错误日志功能，快速定位问题并保障服务稳定性。

Pingora 提供完善的日志系统，可以记录 **错误、警告、请求信息和运行状态**。  
合理配置错误日志，有助于运维排查问题和监控服务健康。

## 日志配置

Pingora 支持在配置文件中设置日志输出路径和日志级别：

```yaml
logging:
  level: info   # 日志等级: debug, info, warn, error
  file: /var/log/pingora.log
````

### 日志等级说明

| 等级    | 说明                   |
| ----- | -------------------- |
| debug | 最详细的调试信息，开发环境常用      |
| info  | 普通运行信息，如启动、请求统计      |
| warn  | 潜在问题或异常情况            |
| error | 错误信息，通常表示请求失败或 panic |

## 日志输出方式

* **标准输出**：默认打印到终端，适合前台调试；
* **文件输出**：配置 `logging.file` 后，将日志写入指定文件；
* **系统日志**：结合 systemd，可通过 `journalctl -u pingora` 查看。

## 示例：记录错误

在自定义过滤器或处理函数中，使用日志宏记录错误：

```rust
use log::{error, info};

fn handle_request(req: Request) -> Result<Response, Error> {
    if let Err(e) = process_request(&req) {
        error!("处理请求失败: {:?}", e);
        return Err(e);
    }
    info!("请求处理成功: {:?}", req.path());
    Ok(Response::new())
}
```

## 日志轮转

建议结合操作系统日志轮转机制（如 logrotate）管理日志文件，避免日志无限增长：

```txt
/var/log/pingora.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}
```

## 排查建议

1. **检查错误等级日志**：优先查看 `error` 和 `warn` 信息；
2. **分析请求上下文**：根据请求路径、客户端 IP、时间戳定位异常；
3. **结合 panic 日志**：查看是否存在未捕获的 panic 导致异常。

---

通过合理配置和使用 Pingora 的错误日志，可以在问题发生时快速定位原因，提高服务可靠性与可维护性。
