sslogread
Python reader module for the Speedy Structured C++17 logging library
See github repository for more details.
Installation
From pypi
python3 -m pip install sslogread
From sources
git clone https://github.com/dfeneyrou/sslog
cd sslog
mkdir build && cd build
cmake .. -DSSLOG_BUILD_PYTHON_READER=ON
make -j
python3 -m pip install python/dist/sslogread-*.whl
sslogread.load
This function (the unique one of the module) is the mandatory first step to work with logs.
It reads the meta information of the logs and creates the sslogread.LogSession objects with
enables logs manipulation.
Declaration
def load(path)
| Parameter name | Type | Description |
|---|---|---|
path |
string |
The path of the log folder to represent |
The returned value is a LogSession object if the loading succeeded. In case of failure, an exception with textual explanation is thrown.
The LogSession objects contains only two methods that are described in the following chapters:
| Method name | Description |
|---|---|
query |
Filters logs and return them in a structured form. This is the main service of the module. |
get_strings |
Returns filtered unique strings. This service is typically used to check user-defined consistency of category, name and unit strings. |
Example
import sslogread
try:
session = sslogread.load("/path/to/my/log_folder")
except Exception as e:
print("Loading failed:", e)
sslogread.LogSession.query
This is the main service of the LogSession object. Logs are first filtered then returned in a structured form.
Declaration
The parameters are a list of dictionaries, each of them representing a filtering rule.
A logic OR is performed between them
def LogSession.query({ level_min:"trace", level_max:"off", category:"", thread:"", format:"", must_have_buffer:False, arguments:[],
no_category:"", no_thread:"", no_format:"", must_not_have_buffer:False }, { ... }, ... )
A filter rule is a dictionary containing one or many of the following key-value pairs (logic AND between them):
| Parameter name | Type | Description | Default (accept all) |
|---|---|---|---|
'level_min' |
string |
The minimum log level | 'trace' |
'level_max' |
string |
The maximum log level (off is above all) |
'off' |
'category' |
string |
Filtering-in pattern on category | ' ' |
'thread' |
string |
Filtering-in pattern on thread name | ' ' |
'format' |
string |
Filtering-in pattern on format string | ' ' |
buffer_size_min |
integer |
Filtering-in if buffer length is equal or above | 0 |
buffer_size_max |
integer |
Filtering-in if buffer length is equal or below | maximum size (4GB) |
'arguments' |
[ strings ] |
Filtering-in on arguments names and value (!) No pattern matching |
' ' |
'no_category' |
string |
Filtering-out pattern on category | ' ' |
'no_thread' |
string |
Filtering-out pattern on thread name | ' ' |
'no_format' |
string |
Filtering-out pattern on format string | ' ' |
[!IMPORTANT] Filtering on arguments is not pattern based. Names and values must be exact. The syntax is:
<name><operator><value>with<operator>among=,==,>,>=,<,<=
The<operator><value>can be ommitted to filter on the existence of a named argument.
Ex: "user==georges", "id=315", "weight<=50.0", "weight"
The returned value is a chronologic list of NamedTuples. The sslogread.Log structure is:
| Parameter name | Type | Description |
|---|---|---|
level |
string |
Log level |
timestampUtcNs |
integer |
Log timestamp in nanosecond since UTC epoch |
category |
string |
Log category |
thread |
string |
Log thread name |
format |
string |
Log format string already filled with arguments |
arguments |
list of tuples |
List of log arguments as tuple (name, unit, typed value) |
buffer |
string |
Log buffer in base64 |
Examples
Display all the logs (no filtering) in text:
result = session.query()
for log in result:
print("%d) %s" % (log['timestampUtcNs'], log['format']))
Keep only the logs with a binary buffer and on a category matching *engine*:
result = session.query( { 'buffer_size_min': 1, 'category':'*engine*' } )
Select the logs on a category matching *engine* but not on a thread matching worker*
result = session.query( { 'no_thread': "worker*", 'category':'*engine*' } )
Select the logs which possess an argument named id and another named user
result = session.query( { 'arguments': ["id", "user"] } )
[!WARNING] The argument name shall be exact, no pattern matching for argument's names and values
Select the logs which possess an argument named user which has a value github_agent
result = session.query( { 'arguments': ["user==github_agent"] } ) # Note: '=' or '==' are identical
Select the logs on category transaction and which possess an argument named id which has a value higher than 356 and lower or equal to 1000
result = session.query( { 'category': "transaction", 'arguments': ["id>356", "id<=1000"] } )
Select the logs with level >= error, with category name containing 'car', which contain both an argument named 'color' and one named 'wheels' with value >= 4
result = session.query( { 'level_min':'error', 'category':'*car*', 'arguments':['color', 'wheels>=4'] } )
Select the logs on category transaction and which possess an argument named id which has a value higher than 356 and lower or equal to 1000
OR the logs with level >= error, with category name containing 'car', which contain both an argument named 'color' and one named 'wheels' with value >= 4
result = session.query( { 'category': "transaction", 'arguments': ["id>356", "id<=1000"] },
{ 'level_min':'error', 'category':'*car*', 'arguments':['color', 'wheels>=4'] } )
sslogread.LogSession.get_strings
This method returns a list of strings matching both a content pattern and a selection of string flags.
It is basically a query on strings.
Declaration
def LogSession.get_strings(pattern="", in_category=False, in_thread=False, in_format=False, in_arg_name=False, in_arg_value=False, in_arg_unit=False)
[!TIP] If the pattern is empty, then all strings are accepted for this criteria.
If no flag on the string type is set, then all strings are accepted for these criteria.
Example
// Get strings used as a category, matching the pattern "/scheduler/*/worker"
strings = session.get_strings(pattern="/scheduler/*/worker", in_category=True)
// Get all thread name strings
strings = session.get_strings(in_thread=True)
// Get all format strings or argument value strings, containing the word "User"
strings = session.get_strings(pattern="*User*", in_format=True, in_arg_value=True)
License
Released under the MIT license.
Metadata
Release files for sslogread 0.8.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sslogread-0.8.2.tar.gz | 66.1 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| sslogread-0.8.2-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| sslogread-0.8.2-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| sslogread-0.8.2-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| sslogread-0.8.2-cp39-cp39-win_amd64.whl | CPython 3.9 | CPython 3.9 | Windows x86-64 | Details |
| sslogread-0.8.2-cp38-cp38-win_amd64.whl | CPython 3.8 | CPython 3.8 | Windows x86-64 | Details |
Total release size: 3.0 MB
Release files / sslogread-0.8.2.tar.gz
| Download URL | sslogread-0.8.2.tar.gz |
|---|---|
| Size | 66.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7e77671a567ee63ab0da0f9c6fe4bbcd03223c79d470f7b2bba15f6f6bcd585f
|
|
BLAKE2b-256 checksum How to use checksums |
0492b3c115bc1dd0fa4f5479d9992ecccd235117f47f6570a36f36fa8d90b57c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.3
|
Release files / sslogread-0.8.2-cp312-cp312-win_amd64.whl
| Download URL | sslogread-0.8.2-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 592.3 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b29ec14c1ba62ab53d5b0359328ff96c0dd9c1dd2076efeb29cc0c7c72e9abfa
|
|
BLAKE2b-256 checksum How to use checksums |
c71bfc2b2807aeaa60a156b9583e7c4f5a441ec880a47b251639cdfaea3fc130
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.3
|
Release files / sslogread-0.8.2-cp311-cp311-win_amd64.whl
| Download URL | sslogread-0.8.2-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 592.3 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cbfa9a23288b60c4798162e67488842a876e209ee8d4fd040e6838cd04a8dc6e
|
|
BLAKE2b-256 checksum How to use checksums |
51f40a07a41528ad51a0572d9abebf6cbe3a28ab6c45ee64e97de77e83c73845
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.3
|
Release files / sslogread-0.8.2-cp310-cp310-win_amd64.whl
| Download URL | sslogread-0.8.2-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 592.3 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7d152b49d8ff90e57efa77725bd713ed6e4f2a32f1277c8094ac66daed2e3d84
|
|
BLAKE2b-256 checksum How to use checksums |
a43007df1539cfddf8eb445ac0faea615fc4b349e402a2e9382e074949b22873
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.3
|
Release files / sslogread-0.8.2-cp39-cp39-win_amd64.whl
| Download URL | sslogread-0.8.2-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 592.3 kB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
15f938d689f299fb4da2878d7bc08e84c1064e6529b81563bbd3cfad23fcb452
|
|
BLAKE2b-256 checksum How to use checksums |
210c7d9e9c9a43987c6cbbf336c54d38c01e3c17d819a2fa101be710e9b35949
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.3
|
Release files / sslogread-0.8.2-cp38-cp38-win_amd64.whl
| Download URL | sslogread-0.8.2-cp38-cp38-win_amd64.whl |
|---|---|
| Size | 592.2 kB |
| Tags | CPython 3.8 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
dc047a0ca080ea54c6498aa37692c8172e6bbb101e8c58825e59f9aa6cdd3e87
|
|
BLAKE2b-256 checksum How to use checksums |
53f68de4e581ed98a1779a6088e17527afc486ede7aa205cd0299a1e60e0999d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.12.3
|