LogAlign is a command-line tool to annotate log lines with links to their definitons and argument expression.
Download the latest linux-amd64 canary build from Release.
This tool depends on libpcre2
and libhyperscan5
to run. Install them from your system's package manager.
First, users need to build a corpus from source files to extract all relevant log calls. This guide uses openssh as an example.
Clone and download the source of openssh. run logalign corpus new-config
to generate a sample configuration. Edit .logalign.toml
to the follows:
project = 'openssh'
# source files to grep
source_regex = '.*\.c'
ignore_source_regex = 'generated\.c$'
# Could define multiple [[definitions]] under different 'id'
[[definitions]]
id = 'openssh_logs'
# This is a Treesitter query
# See https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries for the full syntax
# Use https://intmainreturn0.com/ts-visualizer/ to visualize the TreeSitter AST for a given code snippet
#
# It needs to capture three components:
# - @method: the log function name
# - @format_string: a printf-like format string. Should not include surrounding quotes
# - @argument_expr. Each @argument_expr should match one argument passed to the log call. Must match the number of
# directives in format_string
query = """
(call_expression
function: (identifier) @method
(#match? @method \"(logit|error|debug|fatal|logdie|verbose|debug3|debug2)(_f|_r|_fr)?\")
arguments: (argument_list
\"(\"
[(concatenated_string
(string_literal
_*
[(string_content)
(escape_sequence)
]+ @format_string
_*
)+
)
(string_literal
_*
[(string_content)
(escape_sequence)
]+ @format_string
_*
)
]
(
\",\"
(_) @argument_expr
)*
\")\"
)
)"""
# language to run this query. Currently supports c,cpp,java,golang,javascript,python,typescript
language = 'c'
syntax = 'printflike'
# A template string to link to the source at {file} {line}
link_template = 'https://github.com/openssh/openssh-portable/blob/master/{file}#L{line}'
# Remove redundant '\n' at the end of @format_string
strip_tailing_newline = true
Then, run logalign corpus build
. It should output Corpus built successfully
.
Check the generated corpus via logalign corpus ls
and logalign corpus cat openssh
.
To annoate log files based on built corpus, run logalign corpus view /var/log/auth.log
. If your terminal supports OSC-8, you can control/meta/alt click the
left source panel to jump to the definitions.
Apache v2