sslog reader library
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sslogread-0.8.2.tar.gz.
File metadata
- Download URL: sslogread-0.8.2.tar.gz
- Upload date:
- Size: 66.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e77671a567ee63ab0da0f9c6fe4bbcd03223c79d470f7b2bba15f6f6bcd585f
|
|
| MD5 |
e24bcc8b03c78060477d90ef02e31b5c
|
|
| BLAKE2b-256 |
0492b3c115bc1dd0fa4f5479d9992ecccd235117f47f6570a36f36fa8d90b57c
|
File details
Details for the file sslogread-0.8.2-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: sslogread-0.8.2-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 592.3 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b29ec14c1ba62ab53d5b0359328ff96c0dd9c1dd2076efeb29cc0c7c72e9abfa
|
|
| MD5 |
947ed2256629df7944adafc9e29a78e1
|
|
| BLAKE2b-256 |
c71bfc2b2807aeaa60a156b9583e7c4f5a441ec880a47b251639cdfaea3fc130
|
File details
Details for the file sslogread-0.8.2-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: sslogread-0.8.2-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 592.3 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cbfa9a23288b60c4798162e67488842a876e209ee8d4fd040e6838cd04a8dc6e
|
|
| MD5 |
d234837e7bdd3bd6387f446107f0aea8
|
|
| BLAKE2b-256 |
51f40a07a41528ad51a0572d9abebf6cbe3a28ab6c45ee64e97de77e83c73845
|
File details
Details for the file sslogread-0.8.2-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: sslogread-0.8.2-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 592.3 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d152b49d8ff90e57efa77725bd713ed6e4f2a32f1277c8094ac66daed2e3d84
|
|
| MD5 |
6ac19b174858dc5ebd582c4dc2c1b8ab
|
|
| BLAKE2b-256 |
a43007df1539cfddf8eb445ac0faea615fc4b349e402a2e9382e074949b22873
|
File details
Details for the file sslogread-0.8.2-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: sslogread-0.8.2-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 592.3 kB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15f938d689f299fb4da2878d7bc08e84c1064e6529b81563bbd3cfad23fcb452
|
|
| MD5 |
9b3d3a2dedc9f00d5add43da33b752c4
|
|
| BLAKE2b-256 |
210c7d9e9c9a43987c6cbbf336c54d38c01e3c17d819a2fa101be710e9b35949
|
File details
Details for the file sslogread-0.8.2-cp38-cp38-win_amd64.whl.
File metadata
- Download URL: sslogread-0.8.2-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 592.2 kB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc047a0ca080ea54c6498aa37692c8172e6bbb101e8c58825e59f9aa6cdd3e87
|
|
| MD5 |
329fef5aaa48938fec42685f4ee73dee
|
|
| BLAKE2b-256 |
53f68de4e581ed98a1779a6088e17527afc486ede7aa205cd0299a1e60e0999d
|