# 过滤日志

> Query and filter your structured logs using a custom query language with operators and boolean expressions.

Logging 服务支持自定义查询语言，让您能够轻松过滤结构化的日志。本节将介绍查询语言的语法和用法，并提供一些示例来帮助您入门。

## 基本语法和运算符##basic-syntax-and-operators

过滤查询由一个或多个条件组成。一个条件的基本语法包含以下组成部分：

| **组成部分** | **条件**                                                 |
| -------- | ------------------------------------------------------ |
| 字段       | 要作为过滤依据的字段，例如 `severityText`、`body` 或 `logAttributes`。 |
| 运算符      | 支持的运算符之一。请参阅下面的运算符表。                                   |
| 值        | 要与字段比较的值。                                              |

请参阅下表以查看支持的运算符列表。

| **运算符** | **含义**           |
| ------- | ---------------- |
| `=`     | 等于               |
| `!=`    | 不等于              |
| `~=`    | 包含（仅可用于 `body`）  |
| `!~=`   | 不包含（仅可用于 `body`） |
| `\>`    | 大于               |
| `<`     | 小于               |
| `<=`    | 小于或等于            |
| `\>=`   | 大于或等于            |

## 布尔表达式和分组##boolean-expressions-and-grouping

您可以使用布尔表达式和带括号的分组功能来创建复杂的过滤查询。因此，您可以组合多个条件来创建精确的过滤器。

| **布尔表达式**     | **含义**                    |
| ------------- | ------------------------- |
| `AND` 或 `&&`  | 要求任一端的两个条件都成立。            |
| `OR` 或 `\|\|` | 要求任一端的至少一个条件成立。           |
| 分组            | 使用括号 ( ) 对表达式进行分组并控制计算顺序。 |

为简化查询的编写，换行符也被解释为布尔值 `AND`。这意味着，当希望所有条件都匹配时，可以每行编写一个条件。

## 过滤查询示例##examples-of-filter-queries

选择特定严重性级别的所有日志：

```text
severityText = "ERROR"
```

从 Cloud Code 中选择高于特定严重性级别的所有日志（换行符被视为 AND）：

```text
resourceAttributes.service.name = "cloud-code"
severityNumber >= 12
```

排除消息中包含特定字词的日志：

```text
body !~= "healthcheck"
```

组合多个条件和分组（使用“severity”别名）：

```text
(logAttributes.event.name = "example-event" AND body ~= "timeout") OR (logAttributes.custom.counter > 9000 AND severity = "WARN")
```

### 注意##notes

请注意以下关于过滤查询语言的事项：

* 为方便起见，`severityText` 字段还采用别名 `severity`
* 仅 `body` 字段支持模糊匹配运算符（~~= 和 !~~=）
* `logAttributes` 键区分大小写
* `logAttributes` 值自动转换为字符串
