应用程序日志徽标

JSON 和应用程序日志

连接 应用程序日志 到 Excel、Sheets 和 AI

应用程序日志和堆栈跟踪信息仍需附上。来自 ECS、Serilog、pino 或 Bunyan 的 JSON 行。纯文本 时间戳 [级别] 日志记录器:消息 文本中,四十行的堆栈跟踪信息会保留在引发堆栈跟踪的行中,而不是变成四十行无用的行。此外,在 Debian 和 Ubuntu 系统中,还有两个日志记录了系统上的更改。

1联系
0入境口岸
只读强制执行
4 种应用程序日志格式 消息中包含堆栈跟踪信息 dpkg 和 apt 软件包历史记录 只读 · 您的应用中未添加任何内容
大创意

您的日志文件夹将变成一个表格,您可以按表格进行分组。

不是 grep,也不是日志堆栈。查询流读取应用程序已写入的文件,固定格式,并提供类型化的列——因此,“本周哪个日志记录器抛出的错误最多”只需一次查询,而不是耗费一下午的时间。解析器无法读取的行会被保留为一行,并附带原因,而不是被默默丢弃。

日志文件夹在您的服务器上
shopfront-api/app.jsonlJSON
店面工作人员/应用程序日志文本
历史日志易于

轮换、压缩存档和重读文件——已处理

最嘈杂的日志记录器.sql查询语言
选择 应用程序、日志记录器、
       数数(*) AS 错误
   文件集.事件
地点  级别 = '错误'
GROUP BY 应用程序,日志记录器
ORDER BY 错误 DESC
结果日志记录器错误
应用程序日志记录器错误
店面 API支付客户端412
店面 API订单回购96
店面工人电子邮件发送者31
店面网站会话过滤器4

在同一查询中将其连接到您的应用程序数据库

你的应用已经写入的文件,现在可以生成一个表格,用于生成报告。

来源

你的应用会写入两种形状,盒子也会写入两种形状。

每张卡片都列出了 Query Streams 读取的具体文件以及从中获取的信息。您无需采用任何日志库或更改格式即可实现此功能——支持的格式正是这些工具默认生成的格式。

支持的应用程序日志

4 种格式
JSON 行ECS、Serilog 紧凑型、pino、Bunyan
  • 每行一个 JSON 对象 .jsonl, .ndjson*-json.log
  • ECS 字段名称直接对应 — 日志级别, 主机名, 服务名称
  • Serilog compact、pino 和 Bunyan 也读过:相同的键,不同的拼写
  • 嵌套对象会扁平化为虚线列;任何未映射的内容都会落在空白处。 数据
  • 附录;日期轮换和 .gz 随后
文本日志时间戳、级别、日志记录器、消息
  • 默认形状:图章、括号内的级别、日志记录器、消息
  • 堆栈跟踪信息会连接到引发该堆栈跟踪的代码行——只有一行,而不是四十行。
  • 在 …, 原因:回溯 全部内容读作续篇
  • 阅读 。日志, 。出去。TXT; JSON 文件已通过声明排除在外。
  • 毫秒以逗号或点号分隔;本地时钟读取方式与代理的时钟相同。
dpkg软件包日志
  • 每个包装步骤一行: 安装, 升级, 消除, 配置
  • 包裹, 版本新版本 作为他们自己的专栏
  • 状态 行携带状态 dpkg 将包裹移至
  • /var/log/dpkg.log 及其编号 .gz 旋转
  • 文件中没有区域;读取为代理的本地时钟
易于历史记录
  • 键:值 每个交易一个区块,区块之间留空行
  • 确切的 命令行 那次运行,以及它改变了什么。
  • 开始日期 是事件发生时间; 结束日期 它有自己的专栏。
  • 未完成的交易会等待一段时间,而不是被拆分成两部分。
  • /var/log/apt/history.log 加上它的 .gz 旋转
更多信息这只是起点,而非终点

每次发布代理程序版本时,都会添加新的应用程序和软件包日志格式。由于代理程序会自行更新,因此后续添加的格式无需任何人修改服务器即可出现在连接器中。

所有四个解析器均使用真实捕获的日志文件(包括轮换和压缩归档文件)构建和测试。这两个软件包日志仅适用于 Debian 和 Ubuntu——没有针对基于 RPM 的发行版或 Windows 软件包历史记录的配置文件,我们宁愿提前说明这一点,也不愿让您在安装过程中自行发现。
它所到之处

您应用程序在每个区域的日志, 看看它运行在哪里

一个应用程序很少只运行在一台服务器上。API 可能位于一个云区域,员工可能位于另一个云区域,也可能仍然运行在办公室的服务器上。每个位置都运行着一个网络代理,它会读取日志文件(日志文件就位于此处),然后连接到查询流。对于您的防火墙来说,这只是一个普通的出站连接——无需打开任何端口,无需构建 VPN,也无需向您的应用程序添加任何日志库。

欧盟西部 API 写入 JSON 行,每个服务一个文件 拨号退出
美国东部 工作人员正在编写文本日志、堆栈跟踪等。 拨号退出
总公司 一个旧盒子,旁边还有 dpkg 和 apt 的历史记录。 拨号退出

三个出站连接,只需一个查询点——无需入站端口、无需 VPN、无需更改防火墙。

每个地点一名代理人

代理程序覆盖整个位置,而非单个日志:该位置的 JSON 行、文本日志和软件包历史记录都会成为同一代理程序上的各自独立的文件集连接器。免费套餐运行一个代理程序,更高级别的套餐可以运行多个代理程序。

1 个位置 = 1 个代理 = 多个连接器

无需打开

代理程序会建立一个加密的出站连接,请求和返回的数据都通过该连接传输。无需设置入站端口、使用 VPN 或更改防火墙设置——也无需在您的应用程序中添加任何内容即可使其正常工作。

一个连接,双向

跨区域的一次查询

每个来源 联合查询 它会指定自己的代理,因此只需一条语句即可将 API 的错误信息放在一个区域,与工作进程的错误信息放在另一个区域,或者放在解释其启动时间的包历史记录旁边。此功能包含在 Business 和 Enterprise 版本中。

2 个区域 → 1 个结果集

他们不断更新自己。

代理程序会自动更新,因此后续版本中添加的日志格式无需您自行部署即可覆盖所有位置。正因如此,上面的列表只是一个起点,而非固定不变的清单。

代理人带来了新的格式。

难点

堆栈跟踪、时钟和类似物

应用程序日志是服务器上最混乱的文件:一个事件可能跨越四十行,两种不相关的格式可能看起来完全相同,而且其中一半的文件根本没有时区信息。所有这些问题都通过声明而非猜测来处理。

一次活动,而非四十行

不以时间戳开头的行属于其上一行。这样,堆栈跟踪就能始终与引发它的消息保持关联,而不是分裂成数十个彼此独立的片段。 GROUP BY 可以重新组装起来。

续行 → 连接,最多 200

两根看起来很像的木头

JSON 应用程序行、Docker 容器和 Web 服务器的 JSON 访问行都是“带有时间戳的 JSON”。格式取决于行的内容,因此每种格式都有其自身的配置文件,而不会根据文件名进行分支。

决定因素是内容,而不是文件名。

一个没有时区的时钟

文本日志、dpkg 和 apt 都会写入主机本地时间,不附加偏移量。这些配置文件不会进行猜测,而是声明时间戳为本地时间,并将其读取为代理的时区——无论如何,原始字符串都会保留在单独的列中。

本地时钟 → 已声明,而非推断

交易仍在进行中

apt 会立即写入升级的开始信息,而只有在 dpkg 完成后才会写入结束信息,这可能需要几分钟时间。尚未关闭的代码块会一直等待,而不是被截断并显示为一个没有开头的事件。

等待结束日期,最多 30 分钟

在文件中5行
2026-09-08 14:02:11,431 [错误] PaymentClient:收费失败 java.net.SocketTimeoutException:读取超时 在 java.base/java.net.SocketInputStream.read 在 PaymentClient.charge(PaymentClient.java:88) …还有24个
在表格中1 行
事件时间
2026-09-08 14:02:11.431
等级
错误
日志记录器
支付客户端
信息
充电失败 ↵ java.net.SocketTimeoutException: 读取超时 ↵ 位于…
统计异常次数,而不是它打印的行数。
该模式

你实际得到的列

并非只是一串带有时间戳的文本。每种格式都会被解析成可直接进行筛选、分组和聚合的类型化列——如果您的应用程序记录的是结构化的 JSON 数据,那么它自身的字段也会被展开成列。

弹性标志
JSON 行ECS · Serilog · 皮诺 · Bunyan
等级日志记录器信息主持人服务溪流数据
应用程序日志图标
文本日志堆栈跟踪已合并
等级日志记录器信息
Debian 标志
dpkg 软件包日志Debian · Ubuntu
行动状态包裹版本新版本细节
Debian 标志
apt 历史日志每个交易一个区块
命令行请求者安装升级消除清除错误结束日期数据

每一行也都承载着 事件时间读取日志所用的原始时间戳,以及日志来源的文件。您的应用程序日志由以下信息标识: 应用程序 以及两个软件包日志 主持人 — 这两个字段都取自文件所在的文件夹,因此每个服务或每台机器使用一个文件夹,就能得到一个清晰的列,方便分组。三列文本日志是特意设计的:与其猜测自由格式消息中不可靠存在的字段,不如保留消息的完整性,包括其堆栈跟踪信息。

一个连接,每个表面

应用程序日志数据可以放在哪里?

日志文件并非无解之谜。只需连接一次文件夹,同一个只读连接即可为 Query Streams 支持的所有接口提供数据——无需二次设置,无需二次复制数据,处理方式与数据库连接器完全相同。

支持

应用程序日志导出到 Excel

微软 Excel · Excel 加载项

将实时应用程序日志结果直接提取到工作表中,并按需刷新——支持桌面版 Excel、Excel Online 和 Microsoft 365。

Excel 的工作原理
支持

应用程序日志保存到 Google 表格

表格插件

从侧边栏运行已保存的应用程序日志查询,并将结果行拖放到工作表中。共享协作者可以自行刷新该工作表。

Google 表格的工作原理
支持

应用程序日志 MCP 服务器

Claude、Cursor 和 MCP 客户端 · MCP 服务器

赋予 AI 助手对应用程序日志的只读访问权限,并提供其编写正确 SQL 所需的架构——聊天中无需提供凭据。

MCP 的工作原理
支持

应用程序日志 REST API

HTTP 端点

将应用程序日志查询发布为任何应用程序都可以调用的已认证 JSON 端点,符合 OpenAPI 3.1 规范,并预置了 Postman、Insomnia 和 Hoppscotch 集合。无需打开数据库端口。

REST API 的工作原理
支持

应用程序日志到 Airtable

自动化平台

按计划将应用程序日志行同步到 Airtable,或者在 Airtable 自动化脚本中获取它们。

Airtable 的工作原理
支持

应用程序日志记录到 Baserow

自动化平台

通过 REST 端点从应用程序日志向 Baserow 表提供数据——无论是自托管还是 Baserow 云。

Baserow 的工作原理
支持

应用程序日志记录到 SeaTable

自动化平台

无需导出文件或暴露数据库,即可使用应用程序日志数据保持 SeaTable 数据库的最新状态。

SeaTable 的工作原理
支持

应用程序日志到 Smartsheet

自动化平台

将应用程序日志结果推送到 Smartsheet 网格中,以便计划和报告从源系统读取数据,而不是从上周的导出数据读取数据。

Smartsheet 的工作原理
支持

应用程序日志记录到 Anvil

Anvil Works · 应用平台

通过 REST 端点向 Anvil Python 应用程序提供应用程序日志,而不是将数据库凭据嵌入到应用程序中。

Anvil 的工作原理
支持

应用程序日志到 Power BI

Power Query M

将生成的 Power Query M 粘贴到 Power BI 高级编辑器中,报表将通过 HTTPS 读取实时应用程序日志结果——无需 ODBC 驱动程序,也无需打开数据库端口。

Power BI 的工作原理
支持

应用程序日志警报和报告

Slack · Discord · 电子邮件 · Webhook

将应用程序日志查询添加到计划中,并将查询结果发送到 Slack、Discord、电子邮件或签名 webhook,或者等到行数、阈值或百分比变化超过您设定的界限时才发送消息。

警报和报告的工作原理
这里最值得关注的是警报卡片:对错误计数进行定时查询无需有人守在终端,因此错误计数激增时会自动发送到 Slack 或收件箱。目前还没有针对日志的详细分步指南——链接页面介绍了各个界面的工作原理。

它刻意不做的事情

它不是实时日志流。查询流会在您运行查询时读取磁盘上的文件,因此错误峰值会以行的形式显示,而不是以您可以监控的流的形式显示。如果您需要在打印日志行时立即发出亚秒级警报,日志管道才是合适的工具,我们会这样建议。

应用程序日志包含应用程序输出的所有内容,这一点需要明确说明:如果它记录了令牌、客户电子邮件或完整的请求正文,那么该字符串已经存在于文件中,并且也会出现在相应的列中。与 Web 服务器日志不同,这里没有字段映射可以排除某些内容。请像对待文件一样谨慎地处理生成的表。

软件包日志记录的部分内容是通过形状识别的,而不是通过捕获来验证的。dpkg 文档中记录了配置文件中的一行,并且 清除消失 行动;合适的文件 请求人, 错误, 清除, 重新安装降级这些配置文件所依据的日志中都没有出现这些内容,因此它们只是被声明,而不是被演示——而且这两个软件包日志都没有涵盖基于 RPM 的发行版或 Windows。

与其说是限制,不如说是一个设置细节:标识列取自文件所在的子文件夹,该子文件夹位于您指向的文件夹之下。将连接器指向一个目录,该目录包含每个服务或每台机器一个子文件夹,您就能轻松获得有用的名称;如果直接指向一个包含零散文件的目录,则每一行都将以该目录命名。设置时只需花费三十秒即可完成。

其余部分遵循常规设计。代理程序连接外部网络并读取文件;不会在应用程序旁边安装任何内容,不会写回任何内容,不会附加或检测任何进程,并且访问权限为只读。

工作原理

只需三个步骤,无需更改应用程序的日志记录方式。

01

指向日志文件夹

赋予 Query Streams Agent 对日志所在位置的读取权限——可以是应用程序旁边的文件夹,也可以是您收集日志的共享文件夹,或者其他任何位置。 /var/log 查看软件包历史记录。

02

它能识别这种格式

查询流通过行内容(而不是文件名)来识别格式——因此,重命名的副本仍然可以读取,并且与固定格式不匹配的文件会被暂时搁置并给出原因,而不是破坏表。

03

查询它,或者连接它

从门户网站运行 SQL,将其实时导入 Microsoft Excel 或 Google Sheets,或者使用联合查询将错误日志与应用程序数据库中的订单和用户连接起来——只需一条语句即可完成。

应用程序日志常见问题解答

我需要使用哪个日志库?

没有特别的原因。如果您编写 JSON 行,Elastic Common Schema 字段名称可以直接映射,Serilog 的紧凑格式、pino 和 Bunyan 也都能读取,因为它们使用相同的顶级键,只是拼写不同——时间戳取自您的行实际包含的常用名称。

如果你写的是纯文本,那么普通文本 时间戳 [级别] 日志记录器:消息 shape 本身就是一种受支持的格式。无需采用任何格式,也无需重新配置任何格式。

堆栈跟踪信息究竟会发生什么变化?

它会一直保留导致该错误的记录。记录从以时间戳开头的行开始,之后每一行不以时间戳开头的行都被视为该行的延续——这正是 Java、.NET 或 Python 跟踪记录的结构。异常类, 在 … 框架,一个 原因: 链和 Python 回溯 所有标题都被识别为属于上一行。

实际区别在于,统计错误次数只统计错误本身。如果没有统计,一个异常就会使错误总数增加它所打印的帧数,而你真正想读取的信息可能与类名不在同一行。

为什么 dpkg 和 apt 会出现在应用程序日志中?

因为它们能回答你在“什么时候开始出现故障的?”之后立即提出的问题——即“发生了什么变化?”。它们是软件包管理器自身的日志,位于同一文件夹树中,读取方式相同,而且它们是错误日志最有用的参考资料。

apt 的历史记录易于阅读:每个事务对应一个数据块,记录了运行的确切命令以及安装、升级或移除的内容。dpkg 的日志粒度更细,每行记录一个软件包安装步骤。两者结合起来,您可以为每次更改指定日期,而无需费力记忆。

我可以将我的错误与导致这些错误的升级关联起来吗?

是的,但有一点需要注意:连接器只能读取一种格式,因此您的应用程序日志和 /var/log/apt/history.log 这里是两个连接器而不是一个。联合查询会将它们连接成一条语句,这与将日志连接到生产数据库的机制相同。

这是值得围绕这个家族展开的查询——除了当天运行的交易之外,每小时的错误数,两者都是从无需发送到任何地方的文件中读取的。

这是实时画面吗?

它是按需读取而非流式传输。查询运行时,文件会按原样读取,因此新行会随着应用程序的写入而出现,文件也会被读取——并非按照固定的夜间时间表,但也并非实时跟踪。

对于询问过去几周的问题并将答案整理到电子表格或定期报告中,这种方式比堆放原木的方式更实用,而且所需的机械设备也少得多。

我的日志中包含您未列出的字段。这些字段丢失了吗?

不。在 JSON 和 apt 格式中,任何未映射到指定列的内容都会保留在某个位置。 数据 列不会被丢弃,因此您记录的请求 ID、租户或持续时间仍然可以查询。嵌套对象在传入时会被扁平化为带点的名称。

如果一行数据与固定格式完全不符,也会被保留下来——作为带有原因的原始行,这样,意外的格式更改就会显示为您可以看到的内容,而不是数字中的无声空白。

Red Hat、Fedora 或 Alpine 的软件包历史记录如何?

没有个人资料 未完成, 好吃apk 目前还没有 Windows 版本的类似工具。这里提供的两种软件包格式分别是 dpkg 的日志和 apt 的历史记录,后者涵盖 Debian 和 Ubuntu 系统。

应用程序自身的日志不受任何影响——JSON 和文本格式并不关心它们存储在哪个发行版上。如果您不确定某个文件夹会被识别为什么,请在进行任何操作之前运行“测试连接”命令,它会报告检测到的内容。

你的申请表上已经写明了。

连接日志文件夹,几分钟内即可运行您的第一个查询。免费套餐,无需信用卡,日志记录方式不变。

只读 · 仅限出站连接 · 您的日志保留在您的服务器上