#json-log #log-viewer #log #json #viewer

app fblog

JSON 日志查看器

44 个版本 (稳定版)

4.10.0 2024年5月21日
4.8.0 2023年12月21日
4.7.0 2023年11月29日
4.4.0 2023年5月14日
0.3.3 2017年7月19日

命令行工具 中排名第 60

每月下载量 34

WTFPL 许可协议

410KB
1.5K SLoC

fblog

一个用于查看 JSON 日志文件的简单工具。

打印特定字段

fblog -a message -a "status > a" sample_nested.json.log

日志前缀

如果您为多个 pod 查询 docker 或 kubectl,它将前缀日志行: PODNAME | {"message": "test"}. fblog 可以解析此信息并将其添加到消息中。只需使用 -p

过滤

要过滤日志消息,可以使用 lua。如果您不确定哪些变量可用,可以使用 --print-lua 来查看 fblog 生成的代码。

fblog -f 'level ~= "info"' # will print all message where the level is not info
fblog -f 'process == "play"' # will print all message where the process is play
fblog -f 'string.find(fu, "bow.*") ~= nil' # will print all messages where fu starts with bow
fblog -f 'process == "play"' # will print all message where the process is play
fblog -f 'process == "rust" and fu == "bower"'
fblog --no-implicit-filter-return-statement -f 'if 3 > 2 then return true else return false end'

# not valid lua identifiers like log.level gets converted to log_level.
# Every character that is not _ or a letter will be converted to _
fblog -d -f 'log_level == "WARN"' sample_elastic.log

# nested fields are converted to lua records
fblog  -d -f 'status.a == 100' sample_nested.json.log

# array fields are converted to lua tables (index starts with 1)
fblog  -d -f 'status.d[2] == "a"' sample_nested.json.log

自定义

fblog 尝试检测日志条目的消息、严重性和时间戳。此行为可以自定义。有关更多信息,请参阅 --help

您可以为 fblog 消息自定义格式:格式化输出

fblog -p --main-line-format "{{#if short_message}}{{ red short_message }}{{/if}}" sample.json.log

以下由 fblog 提供的净化变量

  • fblog_timestamp
  • fblog_level
  • fblog_message
  • fblog_prefix

有关默认格式,请参阅 --help

嵌套值注册为对象。因此,您可以使用 nested.value 来访问嵌套值。

handlebar 辅助工具

  • 粗体
  • 黄色
  • 红色
  • 蓝色
  • 紫色
  • 青色
  • 绿色
  • 颜色_rgb 0 0 0
  • 大写
  • 级别样式
  • 固定大小 10

NO_COLOR

fblog 如果存在 NO_COLOR 环境变量,将禁用颜色输出。

无颜色

消息占位符替换

消息中的占位符(fblog_message)可以用上下文对象或数组中的对应值替换。要启用替换,请传递--s标志或设置上下文键(--c context)或占位符格式(--F {key})。

请注意,占位符格式应写作<PREFIX>key<SUFFIX>,其中它会匹配具有key键的占位符。

示例

给定以下日志(称为example.log

{"message": "Found #{count} new items.", "extra_data": {"count": 556}, "level": "info"}

使用以下参数运行

fblog -c extra_data -F '#{key}' example.log

结果

安装

cargo install fblog

可在包管理器中找到:[AUR](https://aur.archlinux.org/packages/fblog/),[brew](https://formulae.brew.sh.cn/formula/fblog)

日志尾部跟踪

fblog不支持原生日志尾部跟踪,但这很容易实现。

tail -f file | fblog

或者使用kubernetes工具,例如

kubectl logs -f ... | fblog

通常,您可以向fblog管道传递任何无限流。

shell自动完成

fblog --generate-completions <shell>

配置文件

fblog从名为fblog.toml的文件中读取其配置,该文件位于

Linux: $XDG_CONFIG_HOME$HOME/.config

Windows: {FOLDERID_RoamingAppData}

macOS: $HOME/Library/Application Support

如果该文件不存在或为空,[这是默认配置](https://github.com/brocode/fblog/blob/2510306dc2c92acb8b09b589aaf072cd6fe2a173/default_config.toml)。

日志级别

这些级别将由fblog着色

trace
debug
info
warn
error
fatal

您可以映射额外的级别值(用于输出和着色)

[level_map]
10 = "trace"
20 = "debug"
30 = "info"
40 = "warn"
50 = "error"
60 = "fatal"
# these values for example are used by https://npmjs.net.cn/package/bunyan#levels

k9s

在文件~/.config/k9s/plugin.yml中添加以下内容

plugin:
  fblog-pod:
    shortCut: Shift-L
    confirm: false
    description: "fblog"
    scopes:
      - pods
    command: sh
    background: false
    args:
      - -c
      - "kubectl logs --follow -n $NAMESPACE $NAME | fblog"
  fblog-container:
    shortCut: Shift-L
    confirm: false
    description: "fblog"
    scopes:
      - containers
    command: sh
    background: false
    args:
      - -c
      - "kubectl logs  --follow -n $NAMESPACE $POD -c $NAME | fblog"
  fblog-pod-all:
    shortCut: Shift-A
    confirm: false
    description: "fblog -d"
    scopes:
      - pods
    command: sh
    background: false
    args:
      - -c
      - "kubectl logs --follow -n $NAMESPACE $NAME | fblog -d"
  fblog-container-all:
    shortCut: Shift-A
    confirm: false
    description: "fblog -d"
    scopes:
      - containers
    command: sh
    background: false
    args:
      - -c
      - "kubectl logs  --follow -n $NAMESPACE $POD -c $NAME | fblog -d"

依赖项

~9–19MB
~262K SLoC