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
|
; notes:
; - 'args' is mandatory in [handler_*] sections
; - in lists there must not be spaces
;
; top-level config
;
; list of all loggers
[loggers]
keys=root
; root logger sees everything. there can be per-job configs by
; specifying loggers with job_name of the script.
; list of all handlers
[handlers]
;; seems logger module immediately initialized all handlers,
;; whether they are actually used or not. so better
;; keep this list in sync with actual handler list.
;keys=stderr,logdb,logsrv,logfile
keys=stderr
; list of all formatters
[formatters]
keys=short,long,syslog,none
;
; map specific loggers to specifig handlers
;
[logger_root]
level=DEBUG
;handlers=stderr,logdb,logsrv,logfile
handlers=stderr
;
; configure formatters
;
[formatter_short]
format=%(asctime)s %(levelname)s %(message)s
datefmt=%H:%M
[formatter_long]
format=%(asctime)s %(process)s %(levelname)s %(message)s
[formatter_none]
format=%(message)s
[formatter_syslog]
format=%(hostname)s %(service_name)s %(job_name)s %(message)s
;
; configure handlers
;
; file. args: stream
[handler_stderr]
class=StreamHandler
args=(sys.stderr,)
formatter=short
; log into db. args: conn_string
[handler_logdb]
class=skylog.LogDBHandler
args=("host=127.0.0.1 port=5432 user=logger dbname=logdb",)
formatter=none
level=INFO
; JSON messages over UDP. args: host, port
[handler_logsrv]
class=skylog.UdpLogServerHandler
args=('127.0.0.1', 6666)
formatter=none
; rotating logfile. args: filename, maxsize, maxcount
[handler_logfile]
class=skylog.EasyRotatingFileHandler
args=('~/log/%(job_name)s.log', 100*1024*1024, 3)
formatter=long
[handler_syslog]
class=skylog.SysLogHandler
args=(('localhost', 514),)
formatter=syslog
|