

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 字符串变异处理器
<a name="CloudWatch-Logs-Transformation-StringMutate"></a>

本节包含有关可与日志事件转换器配合使用的字符串变异处理器的信息。

**Contents**
+ [lowerCaseString](#CloudWatch-Logs-Transformation-lowerCaseString)
+ [upperCaseString](#CloudWatch-Logs-Transformation-upperCaseString)
+ [splitString](#CloudWatch-Logs-Transformation-splitString)
+ [substituteString](#CloudWatch-Logs-Transformation-substituteString)
+ [trimString](#CloudWatch-Logs-Transformation-trimString)

## lowerCaseString
<a name="CloudWatch-Logs-Transformation-lowerCaseString"></a>

`lowerCaseString` 处理器会将字符串转换为其小写版本。


| 字段 | 说明 | 必填？ | 默认 | 限制 | 
| --- | --- | --- | --- | --- | 
|  withKeys | 要转换为小写的键列表 |  是 |  |  最多条目数：10 | 

**示例**

以以下日志事件为例：

```
{
    "outer_key": {
        "inner_key": "INNER_VALUE"
    }
}
```

转换器配置如下，将 `lowerCaseString` 和 `parseJSON` 结合使用：

```
[
    {
        "parseJSON": {}
    },
    {
        "lowerCaseString": {
            "withKeys":["outer_key.inner_key"]
        }
    }
]
```

转换后的日志事件将如下所示。

```
{
  "outer_key": {
    "inner_key": "inner_value"
  }
}
```

## upperCaseString
<a name="CloudWatch-Logs-Transformation-upperCaseString"></a>

`upperCaseString` 处理器会将字符串转换为其大写版本。


| 字段 | 说明 | 必填？ | 默认 | 限制 | 
| --- | --- | --- | --- | --- | 
|  withKeys | 要转换为大写的键列表 |  是 |  |  最多条目数：10 | 

**示例**

以以下日志事件为例：

```
{
    "outer_key": {
        "inner_key": "inner_value"
    }
}
```

转换器配置如下，将 `upperCaseString` 和 `parseJSON` 结合使用：

```
[
    {
        "parseJSON": {}
    },
    {
        "upperCaseString": {
            "withKeys":["outer_key.inner_key"]
        }
    }
]
```

转换后的日志事件将如下所示。

```
{
  "outer_key": {
    "inner_key": "INNER_VALUE"
  }
}
```

## splitString
<a name="CloudWatch-Logs-Transformation-splitString"></a>

`splitString` 处理器是一种字符串变异处理器，它使用分隔字符将字段拆分为数组。


| 字段 | 说明 | 必填？ | 默认 | 限制 | 
| --- | --- | --- | --- | --- | 
|  entries | 条目数组。数组中的每个项目都必须包含 source 和 delimiter 字段。 |  是 |  |  最多条目数：10 | 
|  source | 要拆分的字段值的键 |  是 |  |  最大长度：128 | 
|  分隔符 | 用于拆分字段值的分隔符字符串 |  是 |  |  最大长度：128 | 

**示例 1**

以以下日志事件为例：

```
{
    "outer_key": {
        "inner_key": "inner_value"
    }
}
```

转换器配置如下，将 `splitString` 和 `parseJSON` 结合使用：

```
[
     {
        "parseJSON": {}
    },
    {
         "splitString": {
            "entries": [
                {
                    "source": "outer_key.inner_key",
                    "delimiter": "_"
                }
            ]
        }
    }
]
```

转换后的日志事件将如下所示。

```
{
  "outer_key": {
    "inner_key": [
      "inner",
      "value"
    ]
  }
}
```

**示例 2**

用于拆分字符串的分隔符可以包含多个字符。

以以下日志事件为例：

```
{
    "outer_key": {
        "inner_key": "item1, item2, item3"
    }
}
```

转换器配置如下：

```
[
     {
        "parseJSON": {}
    },
    {
         "splitString": {
            "entries": [
                {
                    "source": "outer_key.inner_key",
                    "delimiter": ", "
                }
            ]
        }
    }
]
```

转换后的日志事件将如下所示。

```
{
  "outer_key": {
    "inner_key": [
      "item1",
      "item2",
      "item3"
    ]
  }
}
```

## substituteString
<a name="CloudWatch-Logs-Transformation-substituteString"></a>

`substituteString` 处理器是一种字符串变异处理器，它将键的值与正则表达式进行匹配，并将所有匹配项替换为替换字符串。


| 字段 | 说明 | 必填？ | 默认 | 限制 | 
| --- | --- | --- | --- | --- | 
|  entries | 条目数组。数组中的每个项目都必须包含 source、from 和 to 字段。 |  是 |  |  最多条目数：10 | 
|  source | 要修改的字段的键 |  是 |  |  最大长度：128 最大嵌套键深度：3 | 
|  from | 要替换的正则表达式字符串。特殊正则表达式字符（例如 [ 和 ]）在使用双引号时必须使用 \$1\$1 进行转义，在使用单引号时或通过 AWS 管理控制台配置时必须使用 \$1 进行转义。有关更多信息，请参阅 Oracle 网站上的 [Class Pattern](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Pattern.html)。 您可以将模式封装在 `(...)` 中以创建带编号的捕获组，并创建可在 `to` 字段中引用的 `(?P<group_name>...)` 命名捕获组。 |  是 |  |  最大长度：128 | 
|  修改为 | 对于捕获组的 from 反向引用的每个匹配项，可以使用要替换的字符串。对编号组使用 \$1n 形式（如 \$11），对命名组使用 \$1\$1group\$1name\$1（如 \$1\$1my\$1group\$1）。 |  是 |  |  最大长度：128 反向引用最大数量：10 重复反向引用最大数量：2 | 

**示例 1**

以以下日志事件为例：

```
{
    "outer_key": {
        "inner_key1": "[]",
        "inner_key2": "123-345-567",
        "inner_key3": "A cat takes a catnap."
    }
}
```

转换器配置如下，将 `substituteString` 和 `parseJSON` 结合使用：

```
[
    {
        "parseJSON": {}
    },
    {
        "substituteString": {
            "entries": [
                {
                    "source": "outer_key.inner_key1",
                    "from": "\\[\\]",
                    "to": "value1"
                },
                {
                    "source": "outer_key.inner_key2",
                    "from": "[0-9]{3}-[0-9]{3}-[0-9]{3}",
                    "to": "xxx-xxx-xxx"
                },
                {
                    "source": "outer_key.inner_key3",
                    "from": "cat",
                    "to": "dog"
                }
            ]
        }
    }
]
```

转换后的日志事件将如下所示。

```
{
  "outer_key": {
    "inner_key1": "value1",
    "inner_key2": "xxx-xxx-xxx",
    "inner_key3": "A dog takes a dognap."
  }
}
```

**示例 2**

以以下日志事件为例：

```
{
    "outer_key": {
        "inner_key1": "Tom, Dick, and Harry",
        "inner_key2": "arn:aws:sts::123456789012:assumed-role/MyImportantRole/MySession"
    }
}
```

转换器配置如下，将 `substituteString` 和 `parseJSON` 结合使用：

```
[
    {
        "parseJSON": {}
    },
    {
        "substituteString": {
            "entries": [
                {
                    "source": "outer_key.inner_key1",
                    "from": "(\w+), (\w+), and (\w+)",
                    "to": "$1 and $3"
                },
                {
                    "source": "outer_key.inner_key2",
                    "from": "^arn:aws:sts::(?P<account_id>\\d{12}):assumed-role/(?P<role_name>[\\w+=,.@-]+)/(?P<role_session_name>[\\w+=,.@-]+)$",
                    "to": "${account_id}:${role_name}:${role_session_name}"
                }
            ]
        }
    }
]
```

转换后的日志事件将如下所示。

```
{
  "outer_key": {
    "inner_key1": "Tom and Harry",
    "inner_key2": "123456789012:MyImportantRole:MySession"
  }
}
```

## trimString
<a name="CloudWatch-Logs-Transformation-trimString"></a>

`trimString` 处理器会移除键开头和结尾的空格。


| 字段 | 说明 | 必填？ | 默认 | 限制 | 
| --- | --- | --- | --- | --- | 
|  withKeys | 要剪裁的键列表 |  是 |  |  最多条目数：10 | 

**示例**

以以下日志事件为例：

```
{
    "outer_key": {
        "inner_key": "   inner_value  "
    }
}
```

转换器配置如下，将 `trimString` 和 `parseJSON` 结合使用：

```
[
    {
        "parseJSON": {}
    },
    {
        "trimString": {
            "withKeys":["outer_key.inner_key"]
        }
    }
]
```

转换后的日志事件将如下所示。

```
{
  "outer_key": {
    "inner_key": "inner_value"
  }
}
```