9个版本

0.1.14 2023年3月9日
0.1.12 2023年2月6日
0.1.9 2022年4月13日
0.1.8 2021年6月3日
0.1.4 2020年2月6日

#420 in 命令行工具

Apache-2.0

39KB
968

Jaslog

Rust Crates.io

Jaslog 是一个处理结构化日志的日志阅读器,它可以处理非JSON行,显示漂亮的彩色日志,并可以根据JSON的字段进行过滤。

  • 非JSON行将被显示,但会清楚地标记
  • 过滤器适用于任何字段,即使是未识别的字段
  • 如果未识别JSON的结构,所有字段都将显示在日志行上
  • 无法控制显示哪些字段
  • 无法控制格式化

它将与某些特定的JSON结构特别兼容(参见“支持的格式”)。

安装

使用 cargo install

cargo install jaslog

使用预构建的二进制文件

  1. 最新版本 下载二进制文件
  2. 将其放入PATH的一部分的文件夹中
  3. 使其可执行(chmod +x

用法

基本用法

$ jaslog file.json.log

或使用stdin

$ cat file.json.log | jaslog

CLI参数

USAGE:
    jaslog [OPTIONS] [--] [input_file]

ARGS:
    <input_file>    Input file to read

OPTIONS:
    -f, --filter <filters>           Filter the logs. Example:  -f app=this -f module=+Drive (use
                                     '+' to search within the field, use '^' to exclude within the
                                     field)
    -h, --help                       Print help information
    -n, --lines <number_of_lines>    Number of lines to read.
    -V, --version                    Print version information

要过滤,语法是

  • <字段>=<>:搜索字段的精确值
  • <字段>=+<>:搜索字段中的值(欢迎提出更好的语法建议 :-P)
  • <字段>=^<>:搜索字段中值的不存在(欢迎提出更好的语法建议 :-P)
$ jaslog file.json.log -f level=info

您还可以请求只读取前n行

$ jaslog file.json.log -f level=info -n 50

显式支持的格式

当然欢迎提出支持新格式的pull requests!

Elixir日志

{
  "app": "ecto_sql",
  "level": "info",
  "message": "create index etc...",
  "metadata": {},
  "module": "Elixir.Ecto.Migration.Runner",
  "pid": "#PID<0.280.0>",
  "timestamp": "2019-12-18T10:55:50.000393"
}

Logstash的jsonevent-layout日志

{
  "@timestamp": "2020-01-13T12:34:01.740Z",
  "source_host": "04fc4fd30dc3",
  "file": "Dispatcher.java",
  "method": "tryAcceptLeadershipAndRunJobs",
  "level": "DEBUG",
  "line_number": "927",
  "thread_name": "flink-akka.actor.default-dispatcher-3",
  "@version": 1,
  "logger_name": "org.apache.flink.runtime.dispatcher.StandaloneDispatcher",
  "message": "Dispatcher akka.tcp://flink@04fc4fd30dc3:6123/user/dispatcher accepted leadership with fencing token 00000000000000000000000000000000. Start recovered jobs.",
  "class": "org.apache.flink.runtime.dispatcher.Dispatcher",
  "mdc": {}
  }

Log4J的JSONLayout日志

{
  "thread": "main",
  "level": "INFO",
  "loggerName": "org.apache.flink.runtime.dispatcher.DispatcherRestEndpoint",
  "message": "Starting rest endpoint.",
  "endOfBatch": false,
  "loggerFqcn": "org.apache.logging.slf4j.Log4jLogger",
  "instant": {
    "epochSecond": 1622724607,
    "nanoOfSecond": 420000000
  },
  "threadId": 1,
  "threadPriority": 5
}

发布

  • 在Cargo.toml中更新版本
  • 提交
  • 使用 v<版本> 标签,然后推送
  • 运行 cargo publish

依赖关系

~5–15MB
~180K SLoC