# PM2 日志管理

URL: https://caijiao.org/pm2/start-management/logs
Source: docs/pm2/start-management/logs.md
Description: 学习如何使用 PM2 管理和查看 Node.js 应用的日志。PM2 提供了强大的日志功能，帮助你实时监控应用的输出、错误日志，支持日志滚动与自动清理，确保应用运行的可追溯性。

PM2 提供了灵活且强大的日志管理功能，可以帮助开发者轻松查看和管理 Node.js 应用的输出日志和错误日志。通过 PM2 的日志管理，你可以实时跟踪应用的运行状态、调试错误并生成可追溯的日志记录。

## 1. 查看实时日志

要查看应用的实时日志，可以使用以下命令：

```bash
pm2 logs
```

这将显示所有正在运行的应用的日志。如果你只想查看特定应用的日志，可以指定应用名称或 ID：

```bash
pm2 logs my-app
```

或者：

```bash
pm2 logs 0
```

默认情况下，`pm2 logs` 命令会同时显示 **标准输出日志**（stdout）和 **错误日志**（stderr）。

### 日志输出示例

```txt
[0] my-app    | Server started on port 3000
[0] my-app    | Error: Connection failed
[0] my-app    | at /path/to/app.js:15:7
```

日志中包含了应用的标准输出信息（如启动信息、正常日志）以及错误信息。

## 2. 查看错误日志

PM2 还允许你单独查看错误日志。如果你只关心应用的错误输出，可以使用 `--err` 标志来过滤：

```bash
pm2 logs my-app --err
```

这将只显示应用的错误日志，帮助你快速定位并解决问题。

## 3. 管理日志文件

PM2 默认将日志输出到文件中，方便后续查看和存档。你可以通过以下命令查看日志文件的位置：

```bash
pm2 show my-app
```

该命令会列出所有进程的信息，其中包括 **stdout** 和 **stderr** 日志文件的路径。

### 示例输出

```txt
Describing process with id 0 - name my-app
--------------------------------------------------------------
pid             1234
status          online
name            my-app
cpu             0.5%
memory          50MB
user            root
watching        no
uptime          3h
script path     /path/to/my-app/app.js
stdout log      /path/to/my-app/logs/my-app-out.log
stderr log      /path/to/my-app/logs/my-app-error.log
```

## 4. 日志滚动和自动清理

PM2 支持日志滚动和自动清理功能，帮助你避免日志文件无限制增长，占用过多磁盘空间。你可以在配置文件中设置日志滚动的规则。

### 设置日志滚动

在 `ecosystem.config.js` 配置文件中，你可以通过 `log_date_format`、`max_size` 和 `retain` 等选项来设置日志的滚动策略。

```javascript
module.exports = {
  apps: [
    {
      name: 'my-app',
      script: './app.js',
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
      max_size: '10M',  // 日志文件达到 10MB 时滚动
      retain: 7,        // 保留 7 个滚动日志文件
    },
  ],
};
```

配置项说明：

* **log_date_format**: 设置日志的时间格式。
* **max_size**: 设置日志文件的最大大小，超过此大小后将自动滚动。
* **retain**: 设置保留的滚动日志文件数量，超出数量的旧日志会被删除。

### 启用日志滚动

配置完成后，使用以下命令启动应用：

```bash
pm2 start ecosystem.config.js
```

PM2 会自动根据配置滚动日志，并在磁盘空间不足时自动清理旧日志。

## 5. 手动清理日志

如果你需要手动清理 PM2 生成的日志文件，可以使用 `pm2 flush` 命令：

```bash
pm2 flush
```

此命令会清空所有应用的日志文件内容，但不会删除日志文件本身。

## 6. 结语

PM2 提供了强大的日志管理功能，让你能够轻松管理和查看应用的运行日志。无论是实时查看日志、分析错误日志，还是设置日志滚动和自动清理，PM2 都为开发者提供了多种工具来确保应用的稳定运行。

通过合理配置和使用 PM2 的日志功能，你可以更高效地监控和调试 Node.js 应用，确保应用的高可用性和可追溯性。
