10月8日至10日加入我们,在纽约市了解关于 GraphQL 联邦和 API 平台工程的最新技巧、趋势和新闻。参加2024年纽约市的 GraphQL Summit
文档
免费开始

将路由器日志记录到stdout

配置stdcout日志


您可以配置的日志输出将被定向到标准输出,且其输出格式可以设置为文本或 JSON。

有关一般日志配置,请参阅路由器日志配置

标准输出配置

启用

默认情况下,标准输出日志输出是禁用的。

要启用标准输出日志,将enabled选项设置为true

router.yaml
telemetry:
exporters:
logging:
stdout:
enabled: true

格式

您可以配置日志输出格式。默认格式取决于的运行方式:

  • 在交互式shell中,text是默认的。
  • 在非交互式shell中,json是默认的。

您可以在router.yaml中使用telemetry.exporters.logging.stdout.format显式设置格式:

router.yaml
telemetry:
exporters:
logging:
stdout:
enabled: true
format: text

tty_format

当您在交互式shell中运行时,您可以配置日志格式。这在开发期间很有用。

如果同时配置了formattty_format,则输出取决于router运行的 环境:

  • 在交互式shell中,tty_format将具有优先权。
  • 在非交互式shell中,format将具有优先权。

您可以在router.yaml中使用telemetry.exporters.logging.stdout.tty_format显式设置格式:

router.yaml
telemetry:
exporters:
logging:
stdout:
enabled: true
format: json
tty_format: text

rate_limit

日志消息的生产速率可能太高,尤其是在请求处理错误时。为了防止router的日志被冗余消息填满,您可以使用rate_limit选项来设置日志速率限制。

您可以针对每个日志位置设置日志速率限制,不同日志信息可以独立速率限制,具有相同信息但不同属性集度的日志行在相同速率下进行限制。此速率限制仅适用于向 stdout 日志记录,不影响发送到 OTLP 等具有自己的采样配置的跟踪导出器的事件。

要启用速率限制,设置 rate_limit 选项:

router.yaml
telemetry:
exporters:
logging:
stdout:
format: json
rate_limit:
capacity: 1 # number of allowed messages during the rate limiting interval
interval: 3s

有关每个输出格式特有的配置选项,请参阅 textjson 格式参考。

配置参考

选项默认描述
启用true|falsefalse启用或禁用 stdout 日志记录。
格式text|json有关详情,请参阅 格式文档
tty_formattext|json有关详情,请参阅 格式文档

日志输出格式

您可以为日志配置不同的输出格式

每种格式都有其特定的配置设置。

text

text 格式可读性强,非常适合开发调试。它是默认的日志输出格式。

要使用 text 格式,在 router.yaml 中启用 telemetry.exporters.logging.stdout并将格式设置为 text

router.yaml
telemetry:
exporters:
logging:
stdout:
enabled: true
format: text # The default text format will be used

text 格式还可以用作 YAML 中的键,telemetry.exporters.logging.stdout.format.text,以指定高级配置选项:

router.yaml
telemetry:
exporters:
logging:
stdout:
enabled: true
format:
text:
ansi_escape_codes: true
display_filename: true
display_level: true
display_line_number: true
display_target: true
display_thread_id: true
display_thread_name: true
display_timestamp: true
display_resource: true
display_span_list: true
display_current_span: true
display_service_name: true
display_service_namespace: true
display_trace_id: true
display_span_id: true

示例 text 输出:

2023-10-30T15:49:34.174435Z INFO trace_id: bbafc3f048b6137375dd78c10df18f50 span_id: 40ede28c5df1b5cc main ThreadId(01) span_name{span_attr_1="span_attr_1" span_attr_2="span_attr_2"}: event_target: event_file.rs:32: event_attr_1="event_attr_1" event_attr_2="event_attr_2"

文本配置参考

选项默认描述
ansi_escape_codestrue|falsetrue使用ANSI终端转义码。
display_filenametrue|falsefalse日志事件发生时的文件名。
display_leveltrue|falsetrue日志事件的等级,如INFO、WARN、ERROR、TRACE。
display_line_numbertrue|falsefalse事件发生的行号。
display_targettrue|falsefalse事件发生的模块名。
display_thread_idtrue|falsefalse事件发生的线程ID。
display_thread_nametrue|falsefalse事件发生的线程名。
display_timestamptrue|falsetrue事件发生的时间戳。
display_service_nametrue|falsefalse在metrics common中配置的服务名。
display_service_namespacetrue|falsefalse在metrics common中配置的服务命名空间。
display_trace_idtrue|falsefalse事件发生的span中的跟踪ID。
display_span_idtrue|falsefalse事件发生的span中的span ID。
display_span_listtrue|falsetrue一个记录了事件发生及其所有属性的所有span到根的列表。
display_current_spantrue|falsetrue事件发生的span及其所有属性。

json

json格式是一种机器可读格式,非常适合作为应用程序性能监控器(APM)的输入。

路由器支持由tracing-subscriber提供的结构化JSON输出。

要使用json格式,在router.yaml中启用telemetry.exporters.logging.stdout并将格式设置为json:

router.yaml
telemetry:
exporters:
logging:
stdout:
enabled: true
format: json

每个日志条目将是一个单个的、格式良好的JSON,非常适合在您的首选APM工具中处理。

示例默认json输出:

stdout
{
"timestamp": "2023-10-30T14:09:34.771388Z",
"level": "INFO",
"trace_id": "54ac7e5f0e8ab90ae67b822e95ffcbb8",
"span_id": "d52e3478c718b8a9",
"fields": {
"event_attr_1": "event_attr_1",
"event_attr_2": "event_attr_2"
},
"target": "event_target"
}

您可以通过在router.yaml中指定telemetry.exporters.logging.stdout.format.json作为键来配置包含在JSON输出中的属性。

router.yaml
telemetry:
exporters:
logging:
stdout:
enabled: true
format:
json:
display_filename: false
display_level: true
display_line_number: false
display_target: false
display_thread_id: false
display_thread_name: false
display_timestamp: true
display_current_span: true
display_span_list: true
display_resource: true
display_trace_id: true
display_span_id: true

示例json输出:

{
"timestamp": "2023-10-30T15:47:52.570482Z",
"level": "INFO",
"trace_id": "54ac7e5f0e8ab90ae67b822e95ffcbb8",
"span_id": "d52e3478c718b8a9",
"fields": {
"event_attr_1": "event_attr_1",
"event_attr_2": "event_attr_2"
},
"target": "event_target",
"filename": "event_file.rs",
"line_number": 32,
"span": {
"span_attr_1": "span_attr_1",
"span_attr_2": "span_attr_2",
"name": "span_name"
},
"spans": [
{
"span_attr_1": "span_attr_1",
"span_attr_2": "span_attr_2",
"name": "span_name"
}
],
"threadName": "main",
"threadId": "ThreadId(1)"
}

display_current_span

事件还可能输出关于它们所发生的span的信息,这对于记录特定请求的span附加属性非常有用。

要记录span信息,请将telemetry.exporters.logging.stdout.format.json.display_current_span选项设置为true:

router.yaml
telemetry:
exporters:
logging:
stdout:
enabled: true
format:
json:
display_current_span: true

包含span信息的示例输出

{
"timestamp": "2023-10-30T14:09:34.771388Z",
"level": "INFO",
"fields": {
"event_attr_1": "event_attr_1",
"event_attr_2": "event_attr_2"
},
"target": "event_target",
"span": {
"span_attr_1": "span_attr_1",
"span_attr_2": "span_attr_2",
"name": "span_name"
}
}

display_span_list

telemetry.exporters.logging.stdout.format.json.display_span_list选项与display_current_span类似,但不同之处在于,display_span_list输出所有事件发生的span的信息,而不仅仅是当前span的信息。

例如,如果您在请求头中有一个自定义的trace_id,只要在router 段落上配置了该属性,它就会出现在与请求相关的所有日志事件上。

router.yaml
telemetry:
exporters:
logging:
stdout:
enabled: true
format:
json:
display_span_list: true

带有跨度列表的示例输出

{
"timestamp": "2023-10-30T14:09:34.771388Z",
"level": "INFO",
"fields": {
"event_attr_1": "event_attr_1",
"event_attr_2": "event_attr_2"
},
"target": "event_target",
"spans": [
{
"span_attr_1": "span_attr_1",
"span_attr_2": "span_attr_2",
"name": "span_name"
}
]
}

显示资源

配置选项 telemetry.logging.stdout.format.json.display_resource controls whether the resources specified in router.yaml are displayed in log messages. By default, display_resource is true).

例如,给定一个包含 display_resource: truerouter.yaml 和已配置的 resource,日志消息将显示资源:

router.yaml
telemetry:
exporters:
logging:
stdout:
format:
json:
display_resource: true
common:
service_name: bryn-router
resource:
test.resource: test
"resource":{"test.resource":"test","service.name":"bryn-router"}

json 配置参考

选项默认事件字段描述
display_current_spantrue|falsefalse跨度事件发生的span及其所有属性。
display_filenametrue|falsefalse文件名日志事件发生时的文件名。
display_leveltrue|falsetrue级别日志事件的等级,如INFO、WARN、ERROR、TRACE。
display_line_numbertrue|falsefalse行号事件发生的行号。
display_targettrue|falsetrue目标事件发生的模块名。
display_thread_idtrue|falsefalse线程ID事件发生的线程ID。
display_thread_nametrue|falsefalse线程名事件发生的线程名。
display_timestamptrue|falsetrue时间戳事件发生的时间戳。
display_span_listtrue|falsetrue跨度一个记录了事件发生及其所有属性的所有span到根的列表。
显示资源true|falsetrue资源在跟踪公共配置的资源
display_trace_idtrue|falsetrue跟踪ID事件发生的span中的跟踪ID。
display_span_idtrue|falsetrue跨度ID事件被提升的跨度的跨度ID。
前一个
配置
下一个
配置
评分文章评分在GitHub上编辑Edit论坛Discord

©2024Apollo Graph Inc.,商业登记名为Apollo GraphQL。

隐私政策

公司