File: README.md

package info (click to toggle)
python-logistro 2.0.1%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 204 kB
  • sloc: python: 350; makefile: 4
file content (81 lines) | stat: -rw-r--r-- 2,177 bytes parent folder | download
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`.