slog 如何同时输出到控制台和文件?MultiHandler 提案或将终结重复造轮子

本文永久链接 – https://tonybai.com/2025/07/29/slog-multihandler 大家好,我是Tony Bai。 自 log/slog 在 Go 1.21 中引入以来,一个常见的需求始终困扰着开发者:如何将日志同时发送到多个目的地,并为每个目的地设置不同的日志级别?尽管社区已涌现出 samber/slog-multi 等优秀的三方库,但关于“标准库是否应原生支持”的讨论从未停止。最近,一项编号为#65954 的提案,建议在 log/slog 中加入 MultiHandler,获得了 Go 官方的 [likely accept] 评级。本文将带您回顾该提案从被质疑到被接受的全过程,深入探讨其背后的设计权衡。 ...

July 29, 2025 · 5 min · Tony Bai

slog实战:文件日志、轮转与kafka集成

本文永久链接 – https://tonybai.com/2023/09/04/slog-in-action-file-logging-rotation-and-kafka-integration 《slog正式版来了:Go日志记录新选择!》一文发布后,收到了很多读者的反馈,意见集中在以下几点: 基于slog如何将日志写入文件 slog是否支持log轮转(rotation),如果slog不支持,是否有好的log轮转插件推荐? 如何与kafka集成 日志输出有哪些最佳实践 这篇文章就是对上述问题进行补充说明的,供大家参考,希望能给大家带去帮助。 ...

September 4, 2023 · 8 min · Tony Bai

Go社区主流Kafka客户端简要对比

本文永久链接 – https://tonybai.com/2022/03/28/the-comparison-of-the-go-community-leading-kakfa-clients 一. 背景 众所周知,Kafka是Apache开源基金会下的明星级开源项目,作为一个开源的分布式事件流平台,它被成千上万的公司用于高性能数据管道、流分析、数据集成和关键任务应用。在国内,无论大厂小厂,无论是自己部署还是用像阿里云提供的Kafka云服务,很多互联网应用已经离不开Kafka了。 互联网不拘泥于某种编程语言,但很多人不喜欢Kafka是由Scala/Java开发的。尤其是对于那些对某种语言有着“宗教般”虔诚、有着“手里拿着锤子,眼中满世界都是钉子”的程序员来说,总是有想重写Kafka的冲动。但就像很多新语言的拥趸想重写Kubernetes一样,Kafka已经建立起了巨大的起步和生态优势,短期很难建立起同样规格的巨型项目和对应的生态了(近两年同样火热的类Kafka的Apache pulsar创建时间与Kafka是先后脚的,只是纳入Apache基金会托管的时间较晚)。 ...

March 28, 2022 · 18 min · Tony Bai

聊聊Go应用输出日志的工程实践

配图改自网络 本文永久链接 – https://tonybai.com/2022/03/05/go-logging-practice Go隶属于后端语言,以开发各类服务、中间件和系统平台见长。日常学习Go语言时,日志不是不可或缺的,甚至是无需考虑的,但是一旦到真正的Go的工程实践中,输出日志便是我们绕不过去的、必须面对的问题。 ...

March 5, 2022 · 11 min · Tony Bai

官宣:慕课网课程“Kubernetes实战:高可用集群搭建、配置、运维与应用”上线了

距离我的第一门网课《Kubernetes基础:开启云原生之门》上线已经过去5个多月了,我的实战课《Kubernetes实战:高可用集群搭建、配置、运维与应用》终于在9月27日正式上线了。 一. 课程介绍 《Kubernetes实战:高可用集群搭建、配置、运维与应用》的课程内容与最初课程设计时规划的内容大纲没有太多出入,基本就是根据我最初的想法拟定的内容,这也基本是我这两年学习k8s、积累的k8s实践的路线。整个课程基于kubernetes 1.10.2版本(docker 17.03.2ce)。课程内容大致分为七个部分(与课程主页的课程目录结构稍有差异,但课程内容是一致的): ...

October 17, 2018 · 6 min · Tony Bai

在Kubernetes 1.10.3上以Hard模式搭建EFK日志分析平台

在一年多之前,我曾写过一篇文章《使用Fluentd和ElasticSearch Stack实现Kubernetes的集群Logging》,文中讲解了如何在Kubernetes上利用EFK(elastic, fluentd, kibana)搭建一套可用的集中日志分析平台。当时的k8s使用的是1.3.7版本,创建EFK使用的是kubernetes项目中cluster/addons/fluentd-elasticsearch下面的全套yaml文件,yaml中Elastic Search的volume用的还是emptyDir,并未真正持久化。 ...

June 13, 2018 · 11 min · Tony Bai

使用Fluentd和ElasticSearch Stack实现Kubernetes的集群Logging

在本篇文章中,我们继续来说Kubernetes。 经过一段时间的探索,我们先后完成了Kubernetes集群搭建,DNS、Dashboard、Heapster等插件安装,集群安全配置,搭建作为Persistent Volume的CephRBD,以及服务更新等探索和实现工作。现在Kubernetes集群层面的Logging需求逐渐浮上水面了。 随着一些小应用在我们的Kubernetes集群上的部署上线,集群的运行迈上了正轨。但问题随之而来,那就是如何查找和诊断集群自身的问题以及运行于Pod中应用的问题。日志,没错!我们也只能依赖Kubernetes组件以及Pod中应用输出的日志。不过目前我们仅能通过kubectl logs命令或Kubernetes Dashboard来查看Log。在没有cluster level logging的情况下,我们需要分别查看各个Pod的日志,操作繁琐,过程低效。我们迫切地需要为Kubernetes集群搭建一套集群级别的集中日志收集和分析设施。 ...

March 3, 2017 · 12 min · Tony Bai

使用Filebeat输送Docker容器的日志

今天我们来说说Docker容器日志。 一、容器日志输出的旧疾及能力演进 Docker容器在默认情况下会将打印到stdout、stderr的 日志数据存储在本地磁盘上,默认位置为/var/lib/docker/containers/{ContainerId} /{ContainerId}-json.log。在老版本Docker中,这种日志记录方式经常被诟病,诸如:日志大小无限制、无法 Rotate(轮转)、无日志基本管理能力以及性能糟糕等。针对这些旧疾,Docker一直试图在演进中完善和解决。 ...

March 25, 2016 · 8 min · Tony Bai