Releases: pamburus/hl
v0.25.1
Changed
- Improved performance of
since
anduntil
filters insort
mode by @pamburus in #122 - Improved segment scanning performance by @pamburus in #124
- Improved index rebuilding performance by @pamburus in #123
- Minor performance improvement by @pamburus in #125
- Updated dependencies by @pamburus in #126
Full Changelog: v0.25.0...v0.25.1
v0.25.0
v0.24.2
v0.23.3
v0.24.1
v0.24.0
What's Changed
Added
-
Option
--query
by @pamburus in #112Usage
-
Command
$ hl my-service.log --query 'level > info or status-code >= 400 or duration > 0.5'
Displays messages that either have a level higher than info (i.e. warning or error) or have a status code field with a numeric value >= 400 or a duration field with a numeric value >= 0.5.
-
Command
$ hl my-service.log -q '(request in (95c72499d9ec, 9697f7aa134f, bc3451d0ad60)) or (method != GET)'
Displays all messages that have the 'request' field with one of these values, or the 'method' field with a value other than 'GET'.
-
Complete set of supported operators
- Logical operators
- Logical conjunction -
and
,&&
- Logical disjunction -
or
,||
- Logical negation -
not
,!
- Logical conjunction -
- Comparison operators
- Equal -
eq
,=
- Not equal -
ne
,!=
- Greater than -
gt
,>
- Greater or equal -
ge
,>=
- Less than -
lt
,<
- Less or equal -
le
,<=
- Equal -
- String matching operators
- Sub-string check - (
contain
,~=
), (not contain
,!~=
) - Wildcard match - (
like
), (not like
)- Wildcard characters are:
*
for zero or more characters and?
for a single character
- Wildcard characters are:
- Regular expression match - (
match
,~~=
), (not match
,!~~=
)
- Sub-string check - (
- Operators with sets
- Test if value is one of the values in a set -
in (v1, v2)
,not in (v1, v2)
- Test if value is one of the values in a set -
- Logical operators
-
Notes
- Special field names that are reserved for filtering by predefined fields regardless of the actual JSON field names used to load the corresponding value:
level
,message
,caller
andlogger
. - To address a JSON field with one of these names instead of predefined fields, add a period before its name, i.e.,
.level
will perform a match against the "level" JSON field. - To address a JSON field by its exact name, use a JSON-formatted string, i.e.
-q '".level" = info'
. - To specify special characters in field values, also use a JSON-formatted string, i.e.
$ hl my-service.log -q 'message contain "Error:\nSomething unexpected happened"'
- Special field names that are reserved for filtering by predefined fields regardless of the actual JSON field names used to load the corresponding value:
-
Full Changelog: v0.23.2...v0.24.0
v0.23.2
What's Changed
Added
- Option
--allow-prefix
and environment variableHL_ALLOW_PREFIX
by @pamburus in #111
It allows non-JSON prefixes before JSON log messages
Changed
- By default non-JSON prefixes are no longer allowed and should be enabled by
--allow-prefix
Fixed
- Fixed corrupted output in prefix mode by @pamburus in #109
- Fixed unwanted display of messages without level when filtering by level by @pamburus in #110
Full Changelog: v0.23.0...v0.23.2
v0.23.0
v0.22.1
v0.22.0
What's Changed
Added
-
Support for configuration compatible with ECS log format by @pamburus in #104
- Added support for predefined field names that can match fields in nested objects when used with dot delimiters.
For example, iflog.origin.file.name
is used for a predefined field name, it will match any of the{ "log.origin.file.name": "app.py" }
{ "log": { "origin.file.name": "app.py" } }
{ "log": { "origin": {"file.name": "app.py" } } }
{ "log": { "origin": {"file": {"name": "app.py" } } } }
- etc.
- Added predefined
caller-file
andcaller-line
fields for separate processing of file name and line number.
Example output
23-11-02 08:09:10.423 |INF| __main__: backup for database bar in foo is already done today application='backup-rds' ecs={ version='1.6.0' } language='python' process={ name='MainProcess' pid=1 thread={ id=140610736142144 name='MainThread' } } ... @ app.py:107
Suggested configuration file for ECS logs is etc/defaults/config-ecs.yaml
These settings have not been added to the default configuration because it is not yet clear how they will affect performance. - Added support for predefined field names that can match fields in nested objects when used with dot delimiters.
Full Changelog: v0.21.0...v0.22.0