blob: d221c03436454435ec46e83d59a8edcc0a3670a9 (
plain)
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# ONAP python logging package
- python-package onappylog extend python standard logging library which
could be used in any python project to log MDC(Mapped Diagnostic Contex)
and easy to reload logging at runtime.
-----
## install package
```bash
pip install onappylog
```
## Usage
### 1. MDC monkey patch
Import the MDC monkey patch making logRecord to store context in local thread.
```python
from onaplogging import monkey; monkey.patch_loggingMDC()
```
Import the MDC format to be used to configure mdc output format.
Please replace your old logging format with mdc format in configuration.
```python
from onaplogging import mdcformatter
```
the mdc format example
```python
'mdcFormater':{
'()': mdcformatter.MDCFormatter, # Use MDCFormatter instance to convert logging string
'format': '%(mdc)s and other %-style key ', # Add '%(mdc)s' here.
'mdcfmt': '{key1} {key2}', # Define your mdc keys here.
'datefmt': '%Y-%m-%d %H:%M:%S' # date format
}
```
Import MDC to store context in python file with logger
code.
```python
from onaplogging.mdcContext import MDC
# add mdc
MDC.put("key1", "value1")
MDC.put("key2", "value2")
# origin code
logger.info("msg")
logger.debug("debug")
```
### 2. Reload logging at runtime
It's thread safe to reload logging. If you want to use this feature,
must use yaml file to configure logging.
import the yaml monkey patch and load logging yaml file
```python
from onaplogging import monkey,monkey.patch_loggingYaml()
# yaml config
config.yamlConfig(filepath=<yaml filepath>, watchDog=True)
```
Notice that the watchDog is opening,So your logging could be reloaded at runtime.
if you modify yaml file to change handler、filter or format,
the logger in program will be reloaded to use new configuration.
Set watchDog to **false**, If you don't need to reloaded logging.
Yaml configure exmaple
```yaml
version: 1
disable_existing_loggers: True
loggers:
vio:
level: DEBUG
handlers: [vioHandler]
propagate: False
handlers:
vioHandler:
class: logging.handlers.RotatingFileHandler
level: DEBUG
filename: /var/log/bt.log
mode: a
maxBytes: 1024*1024*50
backupCount: 10
formatter: mdcFormatter
formatters:
mdcFormatter:
format: "%(asctime)s:[%(name)s] %(created)f %(module)s %(funcName)s %(pathname)s %(process)d %(levelno)s :[ %(threadName)s %(thread)d]: [%(mdc)s]: [%(filename)s]-[%(lineno)d] [%(levelname)s]:%(message)s"
mdcfmt: "{key1} {key2} {key3} {key4} dwdawdwa "
datefmt: "%Y-%m-%d %H:%M:%S"
(): onaplogging.mdcformatter.MDCFormatter
standard:
format: '%(asctime)s:[%(name)s]:[%(filename)s]-[%(lineno)d]
[%(levelname)s]:%(message)s '
datefmt: "%Y-%m-%d %H:%M:%S"
```
### 3. reference
[What's MDC?](https://logging.apache.org/log4j/2.x/manual/thread-context.html)
[Onap Logging Guidelines](https://wiki.onap.org/pages/viewpage.action?pageId=20087036)
[Python Standard Logging Library](https://docs.python.org/2/library/logging.html)
|