zerolog PrettyLog 使用指南:为结构化 JSON 日志接入彩色控制台输出
后端可观测性【免费下载链接】zerologZero Allocation JSON Logger项目地址https://gitcode.com/gh_mirrors/ze/zerolog点击查看免费下载zerolog 专注于高效的 JSON 结构化日志输出而 PrettyLog 是官方仓库中提供的一个命令行小工具用于把 JSON 格式的日志流翻译成带颜色、易读的文本输出解决开发调试时日志难以直接阅读的问题。读完本文你将掌握 PrettyLog 的编译与直跑两种方式、Linux 与 Windows 下 stderr 管道的正确接入方法、-time-format参数用法以及它基于zerolog.ConsoleWriter的底层实现原理可以直接在自己的服务日志场景中落地使用。工具定位为什么需要 PrettyLogzerolog 的设计哲学是专注高效的结构化日志其核心输出是 JSON 或 CBOR 二进制格式一条典型的日志长这样{time:5:41PM,level:info,message:Starting listener,listen::8080,pid:37556}这种格式适合程序解析与存储却不适合人眼在终端里直接阅读。为此仓库在 README.md 中明确指出控制台上的友好输出由内置的但相对低效的zerolog.ConsoleWriter提供。PrettyLog 正是把这一能力封装成独立 CLI 的官方示例位于仓库的 cmd/prettylog 目录。它的工作方式很直接从标准输入或指定文件逐行读取 JSON 日志交给zerolog.ConsoleWriter解析并重排为带 ANSI 颜色的可读文本再写到标准输出。因此它不依赖任何配置文件也不需要改动你的业务代码——只要日志还是 JSON 格式就能被美化。核心前提zerolog 默认把日志写到 stderr使用 PrettyLog 之前必须理解一个关键事实zerolog 默认并不把日志写到stdout而是写到stderr。这一点在 cmd/prettylog/README.md 中有明确说明。从源码看全局日志器的初始化也印证了这一点log.go 中的示例使用zerolog.New(os.Stderr)创建日志器而 README.md 的 Pretty Logging 一节同样使用log.Output(zerolog.ConsoleWriter{Out: os.Stderr})。因此把 PrettyLog 接入业务程序时必须正确重定向 stderr 流同时保持 stdout 不被污染例如 HTTP 服务的响应体仍走 stdout。编译与运行两种启动方式PrettyLog 的源码只有一个文件 cmd/prettylog/prettylog.go依赖 zerolog 主模块与go-colorable用于 Windows 下的颜色兼容见 console.go编译非常简单。方式一编译为可执行文件在仓库根目录执行go build -o prettylog cmd/prettylog/prettylog.go生成prettylog可执行文件后即可在任意终端使用见下文管道命令。方式二用go run直接运行无需编译直接把源码作为程序运行go run cmd/prettylog/prettylog.go注意两种方式都必须从仓库根目录或模块内对应相对路径执行因为go run需要解析github.com/rs/zerolog模块依赖见 go.mod。使用方式Linux 与 Windows 的管道接入官方文档给出了两条平台的完整接入命令以下逐一说明其含义。Linux / macOSbash、zshLinux 使用 bash 的进程替换process substitution语法只把 stderr 重定向给 PrettyLogstdout 完全不受影响# 1. 使用编译好的版本 some_program_with_zerolog 2 (prettylog) # 2. 直接使用 go run some_program_with_zerolog 2 (go run cmd/prettylog/prettylog.go)这里2把 stderr 重定向到(...)进程替换创建的管道some_program_with_zerolog可以是任何输出 zerolog JSON 日志的程序。WindowsPowerShell / CMDWindows 不支持进程替换语法官方给出的方案是先把 stderr 合并到 stdout再整体管道给 PrettyLog# 1. 使用编译好的版本 some_program_with_zerolog 21 | prettylog # 2. 直接使用 go run some_program_with_zerolog 21 | go run cmd/prettylog/prettylog.go21将 stderr 重定向到 stdout随后|把合并后的流管道给 PrettyLog。注意此方式下 stdout 与 stderr 已合并无法再区分两者这是 Windows 平台的取舍。读取日志文件无管道时除了管道模式PrettyLog 还支持直接指定日志文件这是官方 README 未展开、但源码明确支持的能力。不带管道、同时传入文件名时它会依次扫描每个文件的每一行并美化输出见 cmd/prettylog/prettylog.goprettylog zerolog_output.jsonl仓库根目录恰好提供了一个真实示例文件 example.jsonl包含 7 条模拟应用日志启动监听、数据库访问、HTTP 请求、慢请求警告、数据库断连错误。用以下命令即可复现官方 pretty.png 展示的效果go run cmd/prettylog/prettylog.go example.jsonl该文件中的每条日志对应图片里的一行彩色输出INF绿色、DBG灰色、WRN黄色、ERR红色字段名与值以不同颜色区分正是 PrettyLog 的典型效果。无参数运行时的用法提示既没有管道输入也没有文件名参数时PrettyLog 会打印如下用法提示并退出返回码 1见 cmd/prettylog/prettylog.goUsage: app_with_zerolog | 2 (prettylog) prettylog zerolog_output.jsonl命令行参数-time-formatPrettyLog 支持一个命令行参数-time-format用于控制日志时间戳的显示格式取值如下定义见 cmd/prettylog/prettylog.go取值对应 Go 时间布局输出示例default默认值time.Kitchen5:41PMfulltime.RFC1123Mon, 13 Oct 2026 13:22:09 0800使用方式some_program_with_zerolog 2 (prettylog -time-format full)传入其他取值时程序会直接panic(Invalid time-format provided)见 cmd/prettylog/prettylog.go因此请严格使用上述两个取值。值得注意的是default对应的time.Kitchen正是zerolog.ConsoleWriter的默认时间格式在 console.go 中定义了consoleDefaultTimeFormat time.Kitchen与 example.jsonl 中time:5:41PM的字段值完全一致——这也解释了为什么示例日志的时间戳恰好是这种格式。底层原理PrettyLog 与 ConsoleWriter 的分工PrettyLog 本体很薄核心逻辑只有两个函数见 cmd/prettylog/prettylog.goisInputFromPipe()通过os.Stdin.Stat()检查标准输入是否为管道字符设备标志决定走管道模式还是文件模式cmd/prettylog/prettylog.go。processInput()用bufio.Scanner逐行读取输入把每一行 JSON 原样交给 writercmd/prettylog/prettylog.go。真正的美化工作在zerolog.NewConsoleWriter()与ConsoleWriter.Write()中完成每一行 JSON 被json.Decoder解析为 mapconsole.go按照默认部件顺序time → level → caller → message依次渲染consoleDefaultPartsOrder()见 console.go时间戳按TimeFormat格式化等级根据FormattedLevels/LevelColors映射着色console.go消息加粗字段名用青色、错误字段用红色加粗console.go其余字段按字母序排列输出其中error字段会被特殊提到最前console.go。另外如果进程环境中设置了NO_COLOR环境变量ConsoleWriter会自动禁用颜色输出console.go适合在无终端或 CI 场景下使用。使用注意事项与限制stdout 保持干净Linux 的2 (prettylog)写法让 stdout 完全不受影响Windows 的21 |会合并两路流需按场景选择。逐行处理processInput基于bufio.Scanner逐行扫描输入必须是一行一条 JSON的标准 zerolog 格式如 example.jsonl不支持多行 JSON 事件同时单行长度受bufio.Scanner默认 token 上限影响超长单行可能被截断报错。文件模式错误处理文件打不开或扫描出错时PrettyLog 会打印错误并os.Exit(1)cmd/prettylog/prettylog.go便于在 shell 中感知失败。性能取舍正如 README.md 所述ConsoleWriter属于提供但相对低效的展示型输出PrettyLog 只适合开发调试、日志回放等人工阅读场景生产环境的日志采集仍应保留原始 JSON 输出。小结PrettyLog 是理解 zerolog 生态结构化输出与人类可读输出分离设计思路的最佳入口业务代码无需任何改动只需一行 shell 管道Linux 用进程替换重定向 stderrWindows 用21合并后管道就能把 JSON 日志流变成带颜色、分级明确的终端文本。配合-time-format参数、文件模式与NO_COLOR环境变量足以覆盖日常开发调试的大部分需求想深入了解颜色与布局的定制能力可继续阅读 console.go 中ConsoleWriter的FormatLevel、FormatTimestamp、FormatFieldName等可配置项以及 console_test.go 中的示例用例。赞分享后端可观测性【免费下载链接】zerologZero Allocation JSON Logger项目地址https://gitcode.com/gh_mirrors/ze/zerolog点击查看免费下载相关推荐EVM Opcodes更新历史从Istanbul到London硬分叉的操作码演进EVM Opcodes更新历史从Istanbul到London硬分叉的操作码演进 EVM以太坊虚拟机操作码是以太坊区块链运行的基础它们的每一次更新都深刻在 OpenCloud 中使用 slog-zerolog把标准库 slog 接入 zerolog 的结构化日志管线在 OpenCloud 中使用 slog zerolog把标准库 slog 接入 zerolog 的结构化日志管线 slog zerolog 是 samber后端微服务存储认证鉴权告别日志混乱Zerolog多输出实战指南同时写入文件与控制台告别日志混乱Zerolog多输出实战指南同时写入文件与控制台 你是否还在为日志管理烦恼开发时需要清晰的控制台输出生产环境又需要详细的文件记录切换配置总后端可观测性上一篇Notepad--10 分钟跑通的跨平台文本编辑器批量替换、文件对比、乱码转换一次搞定下一篇如何通过RedisDesktopManager快速连接AWS ElastiCache和Azure Redis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

linux-dash 全局 CSS 层解析:main、plugins-container、tables 如何撑起一套极简监控面板样式

linux-dash 全局 CSS 层解析:main、plugins-container、tables 如何撑起一套极简监控面板样式

运维观测指标监控监控大盘 【免费下载链接】linux-dash A beautiful web dashboard for Linux 项目地址: https://gitcode.com/gh_mirrors/li/linux-dash 点击查看 免费下载 本文以 src/css/README.md 中描述的"全局基础样式文件"(Global CSS…

2026/10/14 2:23:24 阅读更多 →
10.5 GHz 相控阵雷达开源了:四块板与 10 层混压 PCB 拆解

10.5 GHz 相控阵雷达开源了:四块板与 10 层混压 PCB 拆解

10.5 GHz 相控阵雷达开源了:四块板与 10 层混压 PCB 拆解 【免费下载链接】PLFM_RADAR Open-source, low-cost 10.5 GHz PLFM phased array RADAR system 项目地址: https://gitcode.com/GitHub_Trending/pl/PLFM_RADAR 如果告诉你,一套 16 通道 …

2026/10/14 2:23:24 阅读更多 →
Matlab findpeaks峰值检测:参数调优与实战避坑指南

Matlab findpeaks峰值检测:参数调优与实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:23:24 阅读更多 →

最新新闻

Python爬虫实战:手机APP数据抓取与解析全流程

Python爬虫实战:手机APP数据抓取与解析全流程

简介:这份PDF资料面向具备Python基础、对网络请求与爬虫开发感兴趣的技术爱好者与研发工程师,围绕手机APP数据传输的抓取与解析展开,重点讲解如何借助Fiddler抓包定位登录与话题接口,再通过urllib2构造HTTP请求、携带Header与表单…

2026/10/14 3:04:31 阅读更多 →
C++ 对接 S3 对象存储实战:SDK 选型、分片上传与避坑指南

C++ 对接 S3 对象存储实战:SDK 选型、分片上传与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:04:31 阅读更多 →
SQLite安装全指南:嵌入式数据库跨平台配置与常见坑

SQLite安装全指南:嵌入式数据库跨平台配置与常见坑

第一次折腾SQLite的时候,我找了一圈“Setup.exe”,愣是没找到。下载页面全是压缩包,网上一堆教程各写各的,有人说不用装,有人说得编译源码,看得人发懵。后来我才搞明白:SQLite的“安装”逻辑跟M…

2026/10/14 3:04:31 阅读更多 →
C++手写数据结构实战:动态数组、哈希表、AVL树与图算法

C++手写数据结构实战:动态数组、哈希表、AVL树与图算法

简介:《Implementing Useful Algorithms in C》由Dmytro Kedyk撰写,面向具备一定C基础、希望深入掌握算法设计与工程实现的开发者与计算机专业学生。全书从算法正确性证明、渐进记法与机器模型等基本原则切入,系统讲解数据类型选择、内存管理…

2026/10/14 3:04:31 阅读更多 →
本地27B模型配Function Calling:工具不触发的原因与实战

本地27B模型配Function Calling:工具不触发的原因与实战

给本地跑的27B模型配了三个专业工具之后,我做的第一件事就是拿它试聊天。你猜怎么着——工具列表明明挂在接口定义里,模型却像一个看见工具箱、却只肯用手拧瓶盖的人,简单问题全凭语言能力直接答,一个工具都不碰。我一度觉得这套配…

2026/10/14 3:04:31 阅读更多 →
容器内nvidia-smi报Unknown Error的排查与根治

容器内nvidia-smi报Unknown Error的排查与根治

凌晨两点半,工作群里弹出一条消息:某个长期跑的容器,前一秒还好好的,后一秒容器里的nvidia-smi直接报Failed to initialize NVML: Unknown Error。宿主机上执行nvidia-smi一切正常,新建一个临时容器也能正常看到卡&…

2026/10/14 3:03:31 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →