认识
2024年12月10日
一、认识
stdout
和 stderr
(标准输出和标准错误)日志: stdout
(标准输出):是应用程序用来输出信息的默认流。例如,console.log()
在 Node.js
中输出的信息就会被发送到 stdout
。stderr
(标准错误):是应用程序用来输出错误信息的默认流。任何调用 console.error()
或 throw
异常时,都会输出到 stderr
。
stdout
和 stderr
(标准输出和标准错误)日志 具有如下特点:
-
无状态性:
stdout
和stderr
并不直接与磁盘存储挂钩,它们只是临时显示输出。如果没有额外的机制,它们的内容会在容器重启或Pod
重新调度时丢失。 -
易于访问:在
Kubernetes
中,Pod
的stdout
和stderr
输出会自动收集并发送到标准日志系统(如kubectl logs
或通过集群级别的日志收集系统如Fluentd
、Elasticsearch
、Loki
等)。 -
即时性:输出的日志是实时的,可以通过命令行
kubectl logs <pod-name>
或其他日志收集工具进行查看。 -
无持久化存储:
stdout
和stderr
是短期存储的,一旦容器退出或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>