1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
# **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`.
|