fblog icon indicating copy to clipboard operation
fblog copied to clipboard

Small command-line JSON Log viewer

[[./logo/fblog_small.png]]

  • fblog

    [[https://crates.io/crates/fblog][file:https://img.shields.io/crates/v/fblog.svg]] [[https://github.com/brocode/fblog/blob/nested-values/.github/workflows/rust.yml][file:https://github.com/brocode/fblog/actions/workflows/rust.yml/badge.svg?branch=master]] [[https://rawkode.chat/][file:https://img.shields.io/discord/730728064031653999.svg]]

    A small tool to view json log files.

    [[file:demo.png]]

** Print specific fields

#+BEGIN_SRC shell-script fblog -a message -a "status > a" sample_nested.json.log #+END_SRC

** Filter To filter log messages it is possible to use lua. If you are unsure which variables are available you can use ~--print-lua~ to see the code generated by fblog.

#+BEGIN_SRC shell-script 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 #+END_SRC

** Customize ~fblog~ tries to detect the message, severity and timestamp of a log entry. This behavior can be customized. See ~--help~ for more information.

You can customize fblog messages: Format output: #+BEGIN_SRC shell-script fblog -p --main-line-format "{{#if short_message}}{{ red short_message }}{{/if}}" sample.json.log #+END_SRC

The following sanitized variables are provided by fblog:

  • fblog_timestamp
  • fblog_level
  • fblog_message
  • fblog_prefix

For the default formatting see ~--help~

Nested values are registered as objects. So you can use ~nested.value~ to access nested values.

handlebar helpers:

  • bold
  • yellow
  • red
  • blue
  • purple
  • green
  • color_rgb 0 0 0
  • uppercase
  • level_style
  • fixed_size 10

** NO_COLOR ~fblog~ disables color output if the ~NO_COLOR~ environment variable is present.

[[https://no-color.org/][no-color]]

** Installation #+BEGIN_SRC bash cargo install fblog #+END_SRC

Available in package managers: [[https://aur.archlinux.org/packages/fblog/][AUR]], [[https://formulae.brew.sh/formula/fblog][brew]]

** Log tailing ~fblog~ does not support native log tailing but this is easily achiveable.

#+BEGIN_SRC bash tail -f file | fblog #+END_SRC

Or with kubernetes tooling for example

#+BEGIN_SRC bash kubectl logs -f ... | fblog #+END_SRC

In general you can pipe any endless stream to fblog.

** Discord In the case you want to talk about new features or give us direct feedback, you can join the [[https://rawkode.chat/][Discord]] (Thanks [[https://github.com/rawkode][@rawkode]]) in the channel ~fblog~.