library-distribution-mirror/mirror/logistro/logistro-2.0.1-py3-none-any...

116 lines
3.8 KiB
Plaintext

Metadata-Version: 2.1
Name: logistro
Version: 2.0.1
Summary: Simple wrapper over logging for a couple basic features
Author-email: Andrew Pikul <ajpikul@gmail.com>, Neyberson Atencio <neyberatencio@gmail.com>
Maintainer-email: Andrew Pikul <ajpikul@gmail.com>
License: MIT License
Copyright (c) 2025 GeoPozo
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Project-URL: Homepage, https://github.com/geopozo/logistro
Project-URL: Repository, https://github.com/geopozo/logistro
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
# **logistro (lo-hī-stro)**
`logistro` is an extremely light addition to `logging`, providing sensible defaults.
It also includes `getPipeLogger()` which can be passed to `Popen()` so that its
`stderr` is piped to the already thread-safe `logging` library.
## Which logger level should I use?
`debug2` I use if I'm in a situation where it's okay to dump large amounts of
information. I'm planning on scrolling.
`info` I will maybe use at the beginning and end of functions called.
`debug` Might print stuff from inside functions or it might print shortened
versioning of `debug2`.
Warning, Error, Critical, Exception, these are all more obvious.
## Quickstart
```python
import logistro
logger = logistro.getLogger(__name__)
logger.debug2(...) # new!
logger.debug(...) # or debug1()
logger.info(...)
logger.warning(...)
logger.error(...)
logger.critical(...)
logger.exception(...) # always inside except:
# For subprocesses:
pipe, logger = logistro.getPipeLogger(__name__+"-subprocess")
subprocess.Popen(cli_command, stderr=pipe)
os.close(pipe) # eventually
```
## CLI Flags
* `--logistro-level DEBUG|DEBUG2|INFO|WARNING|ERROR|CRITICAL`
* `--logistro-human` (default)
* `--logistro-structured` which outputs JSON
The help for CLI commands can be included in your program:
```
parser = argparse.ArgumentParser(parents=[logistro.parser])
```
### Functions
* `logistro.set_structured()`
* `logistro.set_human()`
*Generally, they must be called before any other logging call (See note below).*
## Additionally
`logistro.betterConfig(...)` applies our formats and levels. It accepts the same
arguments as `logging.basicConfig(...)` except `format=`, which it ignores.
**It is better to call this early in a multithread program.**
`logistro.getLogger(...)` will ensure `betterConfig()`.
You can use our two formatters manually instead:
* `human_formatter`
* `structured_formatter`
## Changing Logger Formatter Mid-Execution
With a typical setup, calling `set_structured()` or `set_human()`
and then `logistro.coerce_logger(logistro.getLogger())` will change the format.
See [the tech note](TECH_NOTE.md) for an intro into the complexities of `logging`.