zpp_logs 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zpp_logs-1.0.0/LICENSE +21 -0
- zpp_logs-1.0.0/PKG-INFO +299 -0
- zpp_logs-1.0.0/README.md +282 -0
- zpp_logs-1.0.0/setup.cfg +4 -0
- zpp_logs-1.0.0/zpp_logs/__init__.py +1 -0
- zpp_logs-1.0.0/zpp_logs/zpp_logs.py +730 -0
- zpp_logs-1.0.0/zpp_logs.egg-info/PKG-INFO +299 -0
- zpp_logs-1.0.0/zpp_logs.egg-info/SOURCES.txt +9 -0
- zpp_logs-1.0.0/zpp_logs.egg-info/dependency_links.txt +1 -0
- zpp_logs-1.0.0/zpp_logs.egg-info/requires.txt +3 -0
- zpp_logs-1.0.0/zpp_logs.egg-info/top_level.txt +1 -0
zpp_logs-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 ZephyrOff (Alexandre Pajak)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
zpp_logs-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: zpp_logs
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Module de gestion de logs
|
|
5
|
+
Home-page: https://github.com/ZephyrOff/py-zpp_logs
|
|
6
|
+
Author: ZephyrOff <contact@apajak.fr>
|
|
7
|
+
License: MIT License
|
|
8
|
+
Project-URL: Documentation, https://github.com/ZephyrOff/py-zpp_logs
|
|
9
|
+
Keywords: logs module zephyroff
|
|
10
|
+
Platform: ALL
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
|
|
18
|
+
# zpp-logs
|
|
19
|
+
## Informations
|
|
20
|
+
Module pour la gestion des logs (à l'image de logging) avec des tuning personnalisés par niveau de logs
|
|
21
|
+
<br>
|
|
22
|
+
|
|
23
|
+
## Prérequis
|
|
24
|
+
- Python 3
|
|
25
|
+
<br>
|
|
26
|
+
|
|
27
|
+
## Installation
|
|
28
|
+
```console
|
|
29
|
+
pip install zpp-logs
|
|
30
|
+
```
|
|
31
|
+
<br>
|
|
32
|
+
|
|
33
|
+
## Utilisation
|
|
34
|
+
### <ins>Logger</ins>
|
|
35
|
+
|
|
36
|
+
Un logger est un objet qui permet de définir des options (handler, formatter, filter) pour un log.
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
from zpp_logs import Logger
|
|
40
|
+
|
|
41
|
+
log = Logger()
|
|
42
|
+
```
|
|
43
|
+
<br>
|
|
44
|
+
Il est possible de lui donner en paramètre un fichier de configuration au format yaml pour configurer directement les différentes options
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from zpp_logs import Logger
|
|
48
|
+
|
|
49
|
+
log = Logger(configfile='config.yaml')
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
_Exemple de fichier yaml:_
|
|
53
|
+
```config
|
|
54
|
+
formatters:
|
|
55
|
+
standard:
|
|
56
|
+
format: "%(fore:deep_sky_blue_3a)%[%(date:%d/%m/%Y %H:%M:%S)%]%(attr:0)% - %(fore:medium_purple_4)%%(levelname)%%(attr:0)% - %(fore:grey_46)%%(msg)%%(attr:0)%"
|
|
57
|
+
test:
|
|
58
|
+
format: "%(epoch)% - %(msg)%"
|
|
59
|
+
|
|
60
|
+
filters:
|
|
61
|
+
testfunc: test3.test
|
|
62
|
+
|
|
63
|
+
handlers:
|
|
64
|
+
console:
|
|
65
|
+
class: zpp_logs.Console_handler
|
|
66
|
+
level: zpp_logs.CRITICAL
|
|
67
|
+
ops: "<"
|
|
68
|
+
formatter: test
|
|
69
|
+
output: sys.stdout
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
logger:
|
|
73
|
+
handlers: [console]
|
|
74
|
+
filters: [testfunc]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
<br>
|
|
78
|
+
|
|
79
|
+
Dans un Logger, nous pouvons ajouter/supprimer des handler et des filtres, afficher le compteur de log et appeler les méthodes de log.
|
|
80
|
+
Toutes ces options sont détaillées dans la suite.
|
|
81
|
+
|
|
82
|
+
<br>
|
|
83
|
+
|
|
84
|
+
### <ins>Handler</ins>
|
|
85
|
+
|
|
86
|
+
Différents handler sont disponibles pour permettre d'envoyer les logs dans la console, dans un fichier ou par mail.
|
|
87
|
+
Tous les handler disposent des méthodes:
|
|
88
|
+
- __setFormatter()__ pour ajouter un formatter
|
|
89
|
+
```python
|
|
90
|
+
cons.setFormatter(form)
|
|
91
|
+
```
|
|
92
|
+
la méthode attend un objet Formatter
|
|
93
|
+
|
|
94
|
+
<br>
|
|
95
|
+
|
|
96
|
+
- __setLevel()__ pour définir le niveau de log à appliquer
|
|
97
|
+
```python
|
|
98
|
+
cons.setLevel(zpp_logs.DEBUG)
|
|
99
|
+
```
|
|
100
|
+
la méthode attend un niveau de logs.
|
|
101
|
+
Il est possible de lui envoyer un argument ops pour définir le comportement du handler. (Par défaut ==)
|
|
102
|
+
```python
|
|
103
|
+
cons.setLevel(zpp_logs.ERROR, ops="<=")
|
|
104
|
+
```
|
|
105
|
+
le ops permet de comparaison pour trigger le handler. Dans l'exemple du dessus, le handler se déclenche si le log est de niveau ERROR ou inférieur.
|
|
106
|
+
|
|
107
|
+
<br>
|
|
108
|
+
|
|
109
|
+
- __addFilter()__ pour ajouter un filtre.
|
|
110
|
+
Le filter est soit un script (qui peut être une regex), soit une fonction (dans ce cas, le filter attends un retour True pour se déclencer)
|
|
111
|
+
```python
|
|
112
|
+
def test(message):
|
|
113
|
+
if "bjr" in message:
|
|
114
|
+
return True
|
|
115
|
+
return False
|
|
116
|
+
|
|
117
|
+
cons.addFilter(MonModule.test)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
<br>
|
|
121
|
+
|
|
122
|
+
- __removeFilter()__ pour supprimer un filtre.
|
|
123
|
+
Cette méthode permet de supprimer un filtre configuré
|
|
124
|
+
|
|
125
|
+
<br>
|
|
126
|
+
|
|
127
|
+
### Console_handler
|
|
128
|
+
|
|
129
|
+
Un Console_handler permet d'envoyer des messages dans la console.
|
|
130
|
+
Par défaut, le handler n'attend pas de paramètre mais peut recevoir:
|
|
131
|
+
- output: pour définir la destination (Par défaut sys.stdout)
|
|
132
|
+
- level: pour définir le niveau de logs attendu (Par défaut NOTSET)
|
|
133
|
+
- ops: pour définir le comportement du handler. (Par défaut ==) (Voir setLevel)
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
log = Logger()
|
|
137
|
+
cons = Console_handler()
|
|
138
|
+
log.add_handler(cons)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
<br>
|
|
142
|
+
|
|
143
|
+
### File_handler
|
|
144
|
+
|
|
145
|
+
Un File_handler permet d'envoyer des messages dans un fichier.
|
|
146
|
+
Par défaut, le handler attend le chemin du fichier de destination. (Peut recevoir un nom de fichier dynamique avec la syntaxe des formatter) <br>
|
|
147
|
+
Il peut aussi recevoir:
|
|
148
|
+
- rewrite: pour définir si le handler réécrit sur un fichier existant (Par défaut False)
|
|
149
|
+
- level: pour définir le niveau de logs attendu (Par défaut NOTSET)
|
|
150
|
+
- ops: pour définir le comportement du handler. (Par défaut ==) (Voir setLevel)
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
log = Logger()
|
|
154
|
+
cons = File_handler('content.log')
|
|
155
|
+
log.add_handler(cons)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
<br>
|
|
159
|
+
|
|
160
|
+
### RotateFile_handler
|
|
161
|
+
|
|
162
|
+
Un RotateFile_handler permet d'envoyer des messages dans un fichier en prenant en charge une rotation de logs en fonction d'une taille max.
|
|
163
|
+
Par défaut, le handler attend le chemin du fichier de destination. (Peut recevoir un nom de fichier dynamique avec la syntaxe des formatter) <br>
|
|
164
|
+
Il peut aussi recevoir:
|
|
165
|
+
- rewrite: pour définir si le handler réécrit sur un fichier existant (Par défaut False)
|
|
166
|
+
- level: pour définir le niveau de logs attendu (Par défaut NOTSET)
|
|
167
|
+
- ops: pour définir le comportement du handler. (Par défaut ==) (Voir setLevel)
|
|
168
|
+
- maxBytes: pour définir la taille max du fichier de log
|
|
169
|
+
- backupCount: pour définir le nombre maximum de fichier de log. Si la limite est atteinte, il supprime le fichier le plus ancien.
|
|
170
|
+
|
|
171
|
+
```python
|
|
172
|
+
log = Logger()
|
|
173
|
+
cons = RotateFile_handler('content.log')
|
|
174
|
+
log.add_handler(cons)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
<br>
|
|
178
|
+
|
|
179
|
+
### SMTP_handler
|
|
180
|
+
|
|
181
|
+
Un SMTP_handler permet d'envoyer des messages par mail.
|
|
182
|
+
Par défaut, le handler attend les paramètres:
|
|
183
|
+
- smtphost: l'ip ou l'adresse du serveur SMTP sous forme de str. Possibilité de lui envoyer un tuple pour définir le port à utiliser (HOST, PORT)
|
|
184
|
+
- fromaddr: l'adresse mail de l'expéditeur sous forme de str
|
|
185
|
+
- toaddrs: la/les adresses mail des destinataires sous forme de str pour un destination ou une liste pour plusieurs
|
|
186
|
+
- subject: l'objet du mail (Peut recevoir un objet dynamique avec la syntaxe des formatter)
|
|
187
|
+
<br>
|
|
188
|
+
|
|
189
|
+
Il peut aussi recevoir:
|
|
190
|
+
- credentials: pour définir les login de connexion sous forme de liste ou tuple (USERNAME, PASSWORD)
|
|
191
|
+
- secure: pour définir si la connexion doit être sécurisée (Par défaut None)
|
|
192
|
+
- timeout: pour définir le temps timeout pour la réponse du serveur SMTP (Par défaut 5.0)
|
|
193
|
+
- level: pour définir le niveau de logs attendu (Par défaut NOTSET)
|
|
194
|
+
- ops: pour définir le comportement du handler. (Par défaut ==) (Voir setLevel)
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
log = Logger()
|
|
198
|
+
cons = SMTP_handler(smtphost='smtp.local.com', fromaddr='private@local.com', toaddrs=['user1@gmail.com', 'user2@gmail.com'], subject="Test de notification")
|
|
199
|
+
log.add_handler(cons)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
<br>
|
|
203
|
+
|
|
204
|
+
### <ins>Formatter</ins>
|
|
205
|
+
|
|
206
|
+
Un formatter est un objet qui permet de définir le format du message de log envoyé
|
|
207
|
+
Dans un formatter, les trigger doivent être de la forme _%(trigger_name)%_
|
|
208
|
+
Si on veut formater un peu de texte pour aligner les logs, on peut définir un padding en ajoutant la taille avec le 2ème %
|
|
209
|
+
Par exemple, _%(trigger_name)5%_
|
|
210
|
+
|
|
211
|
+
Voici la liste des trigger disponibles
|
|
212
|
+
|
|
213
|
+
| Name | Description |
|
|
214
|
+
|----------|-------------|
|
|
215
|
+
| asctime | Date au format %d/%m/%Y %H:%M:%S:%f |
|
|
216
|
+
| date: strftime_format | Date dans le format qu'on veut |
|
|
217
|
+
| epoch | Date au format epoch |
|
|
218
|
+
| exc_info | Récupération du traceback |
|
|
219
|
+
| levelname | Nom du niveau de log |
|
|
220
|
+
| levelno | ID du niveau de log |
|
|
221
|
+
| msg | Message de log |
|
|
222
|
+
| filename | Nom du fichier d'exécution |
|
|
223
|
+
| filepath | Répertoire parent du fichier d'exécution |
|
|
224
|
+
| lineno | Numéro de la ligne du fichier d'exécution |
|
|
225
|
+
| functname | Nom de la fonction |
|
|
226
|
+
| path | Chemin actuel |
|
|
227
|
+
| process | Nom du process |
|
|
228
|
+
| processid | PID du process |
|
|
229
|
+
| username | Nom d'utilisateur qui exécute le script |
|
|
230
|
+
| uid | uid de l'utilisateur qui exécute le script (only linux) |
|
|
231
|
+
| os_name | Nom de l'OS |
|
|
232
|
+
| os_version | Version de l'OS |
|
|
233
|
+
| os_archi | Architecture de l'OS |
|
|
234
|
+
| mem_total | Capacité max de RAM |
|
|
235
|
+
| mem_available | Capacité disponible de RAM |
|
|
236
|
+
| mem_used | Capacité utilisée de RAM |
|
|
237
|
+
| mem_free | Capacité disponible de RAM |
|
|
238
|
+
| mem_percent | Capacité utilisée de RAM en pourcentage |
|
|
239
|
+
| swap_total | Capacité max de Swap |
|
|
240
|
+
| swap_used | Capacité utilisée de Swap |
|
|
241
|
+
| swap_free | Capacité disponible de Swap |
|
|
242
|
+
| swap_percent | Capacité utilisée de Swap en pourcentage |
|
|
243
|
+
| cpu_count | Nombre de core physique |
|
|
244
|
+
| cpu_logical_count | Nombre de core logique |
|
|
245
|
+
| cpu_percent | Pourcentage de CPU utilisé |
|
|
246
|
+
| current_disk_device | Nom du disque où se trouve le script |
|
|
247
|
+
| current_disk_mountpoint | Point de montage du disque où se trouve le script |
|
|
248
|
+
| current_disk_fstype | Format du disque où se trouve le script |
|
|
249
|
+
| current_disk_total | Capacité max du disque où se trouve le script |
|
|
250
|
+
| current_disk_used | Capacité utilisée du disque où se trouve le script |
|
|
251
|
+
| current_disk_free | Capacité disponible du disque où se trouve le script |
|
|
252
|
+
| current_disk_percent | Capacité utilisée en pourcentage du disque où se trouve le script |
|
|
253
|
+
| fore: color | Couleur de la police d'écriture |
|
|
254
|
+
| back: color | Couleur du fond de la police d'écriture |
|
|
255
|
+
| attr: attribute | Style de la police d'écriture |
|
|
256
|
+
|
|
257
|
+
<br>
|
|
258
|
+
Pour son utilisation, il suffit de créer un objet Formatter et de l'ajouter dans un handler.
|
|
259
|
+
|
|
260
|
+
```python
|
|
261
|
+
from zpp_logs import Logger, Formatter, Console_handler
|
|
262
|
+
|
|
263
|
+
log = Logger()
|
|
264
|
+
form = Formatter("%(fore:deep_sky_blue_3a)%[%(date:%d/%m/%Y %H:%M:%S)%]%(attr:0)% - %(fore:medium_purple_4)%%(levelname)%%(attr:0)% - %(fore:grey_46)%%(msg)%%(attr:0)%")
|
|
265
|
+
cons = Console_handler()
|
|
266
|
+
cons.setFormatter(form)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
<br>
|
|
270
|
+
|
|
271
|
+
### <ins>Envoi des logs</ins>
|
|
272
|
+
|
|
273
|
+
Les méthodes pour envoyer des logs se déclinent en 7 niveaux:
|
|
274
|
+
- log(message): zpp_logs.NOTSET
|
|
275
|
+
- good(message): zpp_logs.GOOD
|
|
276
|
+
- debug(message): zpp_logs.DEBUG
|
|
277
|
+
- info(message): zpp_logs.INFO
|
|
278
|
+
- warning(message): zpp_logs.WARNING
|
|
279
|
+
- error(message): zpp_logs.ERROR
|
|
280
|
+
- critical(message): zpp_logs.CRITICAL
|
|
281
|
+
|
|
282
|
+
<br>
|
|
283
|
+
|
|
284
|
+
Ces méthodes peuvent être appelées soit en direct, soit depuis un logger.
|
|
285
|
+
```python
|
|
286
|
+
from zpp_logs import Logger
|
|
287
|
+
|
|
288
|
+
logger = Logger(configfile="config.yaml")
|
|
289
|
+
logger.warning("Test de logs")
|
|
290
|
+
```
|
|
291
|
+
<br>
|
|
292
|
+
|
|
293
|
+
### <ins>Compteur des logs</ins>
|
|
294
|
+
|
|
295
|
+
Il est possible de récupérer un dictionnaire contenant le compteur des logs envoyés par un logger.
|
|
296
|
+
```python
|
|
297
|
+
>>> logger.count()
|
|
298
|
+
{'CRITICAL': 0, 'ERROR': 0, 'WARNING': 1, 'INFO': 0, 'GOOD': 0, 'DEBUG': 0, 'NOTSET': 0}
|
|
299
|
+
```
|
zpp_logs-1.0.0/README.md
ADDED
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# zpp-logs
|
|
2
|
+
## Informations
|
|
3
|
+
Module pour la gestion des logs (à l'image de logging) avec des tuning personnalisés par niveau de logs
|
|
4
|
+
<br>
|
|
5
|
+
|
|
6
|
+
## Prérequis
|
|
7
|
+
- Python 3
|
|
8
|
+
<br>
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
```console
|
|
12
|
+
pip install zpp-logs
|
|
13
|
+
```
|
|
14
|
+
<br>
|
|
15
|
+
|
|
16
|
+
## Utilisation
|
|
17
|
+
### <ins>Logger</ins>
|
|
18
|
+
|
|
19
|
+
Un logger est un objet qui permet de définir des options (handler, formatter, filter) pour un log.
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
from zpp_logs import Logger
|
|
23
|
+
|
|
24
|
+
log = Logger()
|
|
25
|
+
```
|
|
26
|
+
<br>
|
|
27
|
+
Il est possible de lui donner en paramètre un fichier de configuration au format yaml pour configurer directement les différentes options
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
from zpp_logs import Logger
|
|
31
|
+
|
|
32
|
+
log = Logger(configfile='config.yaml')
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
_Exemple de fichier yaml:_
|
|
36
|
+
```config
|
|
37
|
+
formatters:
|
|
38
|
+
standard:
|
|
39
|
+
format: "%(fore:deep_sky_blue_3a)%[%(date:%d/%m/%Y %H:%M:%S)%]%(attr:0)% - %(fore:medium_purple_4)%%(levelname)%%(attr:0)% - %(fore:grey_46)%%(msg)%%(attr:0)%"
|
|
40
|
+
test:
|
|
41
|
+
format: "%(epoch)% - %(msg)%"
|
|
42
|
+
|
|
43
|
+
filters:
|
|
44
|
+
testfunc: test3.test
|
|
45
|
+
|
|
46
|
+
handlers:
|
|
47
|
+
console:
|
|
48
|
+
class: zpp_logs.Console_handler
|
|
49
|
+
level: zpp_logs.CRITICAL
|
|
50
|
+
ops: "<"
|
|
51
|
+
formatter: test
|
|
52
|
+
output: sys.stdout
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
logger:
|
|
56
|
+
handlers: [console]
|
|
57
|
+
filters: [testfunc]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
<br>
|
|
61
|
+
|
|
62
|
+
Dans un Logger, nous pouvons ajouter/supprimer des handler et des filtres, afficher le compteur de log et appeler les méthodes de log.
|
|
63
|
+
Toutes ces options sont détaillées dans la suite.
|
|
64
|
+
|
|
65
|
+
<br>
|
|
66
|
+
|
|
67
|
+
### <ins>Handler</ins>
|
|
68
|
+
|
|
69
|
+
Différents handler sont disponibles pour permettre d'envoyer les logs dans la console, dans un fichier ou par mail.
|
|
70
|
+
Tous les handler disposent des méthodes:
|
|
71
|
+
- __setFormatter()__ pour ajouter un formatter
|
|
72
|
+
```python
|
|
73
|
+
cons.setFormatter(form)
|
|
74
|
+
```
|
|
75
|
+
la méthode attend un objet Formatter
|
|
76
|
+
|
|
77
|
+
<br>
|
|
78
|
+
|
|
79
|
+
- __setLevel()__ pour définir le niveau de log à appliquer
|
|
80
|
+
```python
|
|
81
|
+
cons.setLevel(zpp_logs.DEBUG)
|
|
82
|
+
```
|
|
83
|
+
la méthode attend un niveau de logs.
|
|
84
|
+
Il est possible de lui envoyer un argument ops pour définir le comportement du handler. (Par défaut ==)
|
|
85
|
+
```python
|
|
86
|
+
cons.setLevel(zpp_logs.ERROR, ops="<=")
|
|
87
|
+
```
|
|
88
|
+
le ops permet de comparaison pour trigger le handler. Dans l'exemple du dessus, le handler se déclenche si le log est de niveau ERROR ou inférieur.
|
|
89
|
+
|
|
90
|
+
<br>
|
|
91
|
+
|
|
92
|
+
- __addFilter()__ pour ajouter un filtre.
|
|
93
|
+
Le filter est soit un script (qui peut être une regex), soit une fonction (dans ce cas, le filter attends un retour True pour se déclencer)
|
|
94
|
+
```python
|
|
95
|
+
def test(message):
|
|
96
|
+
if "bjr" in message:
|
|
97
|
+
return True
|
|
98
|
+
return False
|
|
99
|
+
|
|
100
|
+
cons.addFilter(MonModule.test)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
<br>
|
|
104
|
+
|
|
105
|
+
- __removeFilter()__ pour supprimer un filtre.
|
|
106
|
+
Cette méthode permet de supprimer un filtre configuré
|
|
107
|
+
|
|
108
|
+
<br>
|
|
109
|
+
|
|
110
|
+
### Console_handler
|
|
111
|
+
|
|
112
|
+
Un Console_handler permet d'envoyer des messages dans la console.
|
|
113
|
+
Par défaut, le handler n'attend pas de paramètre mais peut recevoir:
|
|
114
|
+
- output: pour définir la destination (Par défaut sys.stdout)
|
|
115
|
+
- level: pour définir le niveau de logs attendu (Par défaut NOTSET)
|
|
116
|
+
- ops: pour définir le comportement du handler. (Par défaut ==) (Voir setLevel)
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
log = Logger()
|
|
120
|
+
cons = Console_handler()
|
|
121
|
+
log.add_handler(cons)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
<br>
|
|
125
|
+
|
|
126
|
+
### File_handler
|
|
127
|
+
|
|
128
|
+
Un File_handler permet d'envoyer des messages dans un fichier.
|
|
129
|
+
Par défaut, le handler attend le chemin du fichier de destination. (Peut recevoir un nom de fichier dynamique avec la syntaxe des formatter) <br>
|
|
130
|
+
Il peut aussi recevoir:
|
|
131
|
+
- rewrite: pour définir si le handler réécrit sur un fichier existant (Par défaut False)
|
|
132
|
+
- level: pour définir le niveau de logs attendu (Par défaut NOTSET)
|
|
133
|
+
- ops: pour définir le comportement du handler. (Par défaut ==) (Voir setLevel)
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
log = Logger()
|
|
137
|
+
cons = File_handler('content.log')
|
|
138
|
+
log.add_handler(cons)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
<br>
|
|
142
|
+
|
|
143
|
+
### RotateFile_handler
|
|
144
|
+
|
|
145
|
+
Un RotateFile_handler permet d'envoyer des messages dans un fichier en prenant en charge une rotation de logs en fonction d'une taille max.
|
|
146
|
+
Par défaut, le handler attend le chemin du fichier de destination. (Peut recevoir un nom de fichier dynamique avec la syntaxe des formatter) <br>
|
|
147
|
+
Il peut aussi recevoir:
|
|
148
|
+
- rewrite: pour définir si le handler réécrit sur un fichier existant (Par défaut False)
|
|
149
|
+
- level: pour définir le niveau de logs attendu (Par défaut NOTSET)
|
|
150
|
+
- ops: pour définir le comportement du handler. (Par défaut ==) (Voir setLevel)
|
|
151
|
+
- maxBytes: pour définir la taille max du fichier de log
|
|
152
|
+
- backupCount: pour définir le nombre maximum de fichier de log. Si la limite est atteinte, il supprime le fichier le plus ancien.
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
log = Logger()
|
|
156
|
+
cons = RotateFile_handler('content.log')
|
|
157
|
+
log.add_handler(cons)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
<br>
|
|
161
|
+
|
|
162
|
+
### SMTP_handler
|
|
163
|
+
|
|
164
|
+
Un SMTP_handler permet d'envoyer des messages par mail.
|
|
165
|
+
Par défaut, le handler attend les paramètres:
|
|
166
|
+
- smtphost: l'ip ou l'adresse du serveur SMTP sous forme de str. Possibilité de lui envoyer un tuple pour définir le port à utiliser (HOST, PORT)
|
|
167
|
+
- fromaddr: l'adresse mail de l'expéditeur sous forme de str
|
|
168
|
+
- toaddrs: la/les adresses mail des destinataires sous forme de str pour un destination ou une liste pour plusieurs
|
|
169
|
+
- subject: l'objet du mail (Peut recevoir un objet dynamique avec la syntaxe des formatter)
|
|
170
|
+
<br>
|
|
171
|
+
|
|
172
|
+
Il peut aussi recevoir:
|
|
173
|
+
- credentials: pour définir les login de connexion sous forme de liste ou tuple (USERNAME, PASSWORD)
|
|
174
|
+
- secure: pour définir si la connexion doit être sécurisée (Par défaut None)
|
|
175
|
+
- timeout: pour définir le temps timeout pour la réponse du serveur SMTP (Par défaut 5.0)
|
|
176
|
+
- level: pour définir le niveau de logs attendu (Par défaut NOTSET)
|
|
177
|
+
- ops: pour définir le comportement du handler. (Par défaut ==) (Voir setLevel)
|
|
178
|
+
|
|
179
|
+
```python
|
|
180
|
+
log = Logger()
|
|
181
|
+
cons = SMTP_handler(smtphost='smtp.local.com', fromaddr='private@local.com', toaddrs=['user1@gmail.com', 'user2@gmail.com'], subject="Test de notification")
|
|
182
|
+
log.add_handler(cons)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
<br>
|
|
186
|
+
|
|
187
|
+
### <ins>Formatter</ins>
|
|
188
|
+
|
|
189
|
+
Un formatter est un objet qui permet de définir le format du message de log envoyé
|
|
190
|
+
Dans un formatter, les trigger doivent être de la forme _%(trigger_name)%_
|
|
191
|
+
Si on veut formater un peu de texte pour aligner les logs, on peut définir un padding en ajoutant la taille avec le 2ème %
|
|
192
|
+
Par exemple, _%(trigger_name)5%_
|
|
193
|
+
|
|
194
|
+
Voici la liste des trigger disponibles
|
|
195
|
+
|
|
196
|
+
| Name | Description |
|
|
197
|
+
|----------|-------------|
|
|
198
|
+
| asctime | Date au format %d/%m/%Y %H:%M:%S:%f |
|
|
199
|
+
| date: strftime_format | Date dans le format qu'on veut |
|
|
200
|
+
| epoch | Date au format epoch |
|
|
201
|
+
| exc_info | Récupération du traceback |
|
|
202
|
+
| levelname | Nom du niveau de log |
|
|
203
|
+
| levelno | ID du niveau de log |
|
|
204
|
+
| msg | Message de log |
|
|
205
|
+
| filename | Nom du fichier d'exécution |
|
|
206
|
+
| filepath | Répertoire parent du fichier d'exécution |
|
|
207
|
+
| lineno | Numéro de la ligne du fichier d'exécution |
|
|
208
|
+
| functname | Nom de la fonction |
|
|
209
|
+
| path | Chemin actuel |
|
|
210
|
+
| process | Nom du process |
|
|
211
|
+
| processid | PID du process |
|
|
212
|
+
| username | Nom d'utilisateur qui exécute le script |
|
|
213
|
+
| uid | uid de l'utilisateur qui exécute le script (only linux) |
|
|
214
|
+
| os_name | Nom de l'OS |
|
|
215
|
+
| os_version | Version de l'OS |
|
|
216
|
+
| os_archi | Architecture de l'OS |
|
|
217
|
+
| mem_total | Capacité max de RAM |
|
|
218
|
+
| mem_available | Capacité disponible de RAM |
|
|
219
|
+
| mem_used | Capacité utilisée de RAM |
|
|
220
|
+
| mem_free | Capacité disponible de RAM |
|
|
221
|
+
| mem_percent | Capacité utilisée de RAM en pourcentage |
|
|
222
|
+
| swap_total | Capacité max de Swap |
|
|
223
|
+
| swap_used | Capacité utilisée de Swap |
|
|
224
|
+
| swap_free | Capacité disponible de Swap |
|
|
225
|
+
| swap_percent | Capacité utilisée de Swap en pourcentage |
|
|
226
|
+
| cpu_count | Nombre de core physique |
|
|
227
|
+
| cpu_logical_count | Nombre de core logique |
|
|
228
|
+
| cpu_percent | Pourcentage de CPU utilisé |
|
|
229
|
+
| current_disk_device | Nom du disque où se trouve le script |
|
|
230
|
+
| current_disk_mountpoint | Point de montage du disque où se trouve le script |
|
|
231
|
+
| current_disk_fstype | Format du disque où se trouve le script |
|
|
232
|
+
| current_disk_total | Capacité max du disque où se trouve le script |
|
|
233
|
+
| current_disk_used | Capacité utilisée du disque où se trouve le script |
|
|
234
|
+
| current_disk_free | Capacité disponible du disque où se trouve le script |
|
|
235
|
+
| current_disk_percent | Capacité utilisée en pourcentage du disque où se trouve le script |
|
|
236
|
+
| fore: color | Couleur de la police d'écriture |
|
|
237
|
+
| back: color | Couleur du fond de la police d'écriture |
|
|
238
|
+
| attr: attribute | Style de la police d'écriture |
|
|
239
|
+
|
|
240
|
+
<br>
|
|
241
|
+
Pour son utilisation, il suffit de créer un objet Formatter et de l'ajouter dans un handler.
|
|
242
|
+
|
|
243
|
+
```python
|
|
244
|
+
from zpp_logs import Logger, Formatter, Console_handler
|
|
245
|
+
|
|
246
|
+
log = Logger()
|
|
247
|
+
form = Formatter("%(fore:deep_sky_blue_3a)%[%(date:%d/%m/%Y %H:%M:%S)%]%(attr:0)% - %(fore:medium_purple_4)%%(levelname)%%(attr:0)% - %(fore:grey_46)%%(msg)%%(attr:0)%")
|
|
248
|
+
cons = Console_handler()
|
|
249
|
+
cons.setFormatter(form)
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
<br>
|
|
253
|
+
|
|
254
|
+
### <ins>Envoi des logs</ins>
|
|
255
|
+
|
|
256
|
+
Les méthodes pour envoyer des logs se déclinent en 7 niveaux:
|
|
257
|
+
- log(message): zpp_logs.NOTSET
|
|
258
|
+
- good(message): zpp_logs.GOOD
|
|
259
|
+
- debug(message): zpp_logs.DEBUG
|
|
260
|
+
- info(message): zpp_logs.INFO
|
|
261
|
+
- warning(message): zpp_logs.WARNING
|
|
262
|
+
- error(message): zpp_logs.ERROR
|
|
263
|
+
- critical(message): zpp_logs.CRITICAL
|
|
264
|
+
|
|
265
|
+
<br>
|
|
266
|
+
|
|
267
|
+
Ces méthodes peuvent être appelées soit en direct, soit depuis un logger.
|
|
268
|
+
```python
|
|
269
|
+
from zpp_logs import Logger
|
|
270
|
+
|
|
271
|
+
logger = Logger(configfile="config.yaml")
|
|
272
|
+
logger.warning("Test de logs")
|
|
273
|
+
```
|
|
274
|
+
<br>
|
|
275
|
+
|
|
276
|
+
### <ins>Compteur des logs</ins>
|
|
277
|
+
|
|
278
|
+
Il est possible de récupérer un dictionnaire contenant le compteur des logs envoyés par un logger.
|
|
279
|
+
```python
|
|
280
|
+
>>> logger.count()
|
|
281
|
+
{'CRITICAL': 0, 'ERROR': 0, 'WARNING': 1, 'INFO': 0, 'GOOD': 0, 'DEBUG': 0, 'NOTSET': 0}
|
|
282
|
+
```
|
zpp_logs-1.0.0/setup.cfg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .zpp_logs import *
|