跳到主要内容

认识

2024年12月10日
柏拉文
越努力,越幸运

一、认识


stdoutstderr(标准输出和标准错误)日志: stdout(标准输出):是应用程序用来输出信息的默认流。例如,console.log()Node.js 中输出的信息就会被发送到 stdoutstderr(标准错误):是应用程序用来输出错误信息的默认流。任何调用 console.error()throw 异常时,都会输出到 stderr

stdoutstderr(标准输出和标准错误)日志 具有如下特点:

  1. 无状态性stdoutstderr 并不直接与磁盘存储挂钩,它们只是临时显示输出。如果没有额外的机制,它们的内容会在容器重启或 Pod 重新调度时丢失。

  2. 易于访问:在 Kubernetes 中,Podstdoutstderr 输出会自动收集并发送到标准日志系统(如 kubectl logs 或通过集群级别的日志收集系统如 FluentdElasticsearchLoki 等)。

  3. 即时性:输出的日志是实时的,可以通过命令行 kubectl logs <pod-name> 或其他日志收集工具进行查看。

  4. 无持久化存储stdoutstderr 是短期存储的,一旦容器退出或 Pod 被重新调度,日志通常不会被保留(除非通过日志聚合工具进行收集并持久化)。

二、方案


2.1 Pino

2.2 Winston

2.3 console.log/console.error

// 直接使用 console
console.log('This is an INFO log'); // 标准输出 (stdout)
console.error('This is an ERROR log'); // 标准错误 (stderr)
  • console.log 会输出到 stdout

  • console.error 会输出到 stderr

三、查看


3.1 Docker

3.2 Kubernetes

Kubernetes 提供了 kubectl logs 命令来查看 Pod 中容器的标准输出和标准错误日志。

查看单个 Pod 的日志

kubectl get pods 

kubectl logs <pod-name>

实时查看单个 Pod 日志(流式输出)

kubectl get pods 

kubectl logs -l <pod-name>