Gentoo Archives: gentoo-commits

From: "André Erdmann" <dywi@×××××××.de>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/R_overlay:master commit in: roverlay/recipe/
Date: Thu, 05 Jul 2012 16:00:42
Message-Id: 1341503558.f4677f4e6be4007c5cfffd8cdd2563f276b24721.dywi@gentoo
1 commit: f4677f4e6be4007c5cfffd8cdd2563f276b24721
2 Author: André Erdmann <dywi <AT> mailerd <DOT> de>
3 AuthorDate: Thu Jul 5 15:52:38 2012 +0000
4 Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
5 CommitDate: Thu Jul 5 15:52:38 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=f4677f4e
7
8 recipe/easylogger: configurable logging
9
10 * log to disk using a FileHandler/RotatingFileHandler,
11 optionally attached to a MemoryHandler
12 * log to syslog (code is incomplete and disabled)
13 * log to console (either stderr or stdout)
14
15 modified: roverlay/recipe/easylogger.py
16
17 ---
18 roverlay/recipe/easylogger.py | 167 +++++++++++++++++++++++++++++++++++++----
19 1 files changed, 152 insertions(+), 15 deletions(-)
20
21 diff --git a/roverlay/recipe/easylogger.py b/roverlay/recipe/easylogger.py
22 index 112d07b..411397d 100644
23 --- a/roverlay/recipe/easylogger.py
24 +++ b/roverlay/recipe/easylogger.py
25 @@ -2,30 +2,164 @@
26 # Copyright 2006-2012 Gentoo Foundation
27 # Distributed under the terms of the GNU General Public License v2
28
29 +import sys
30 import logging
31 +import logging.handlers
32 +import os.path
33
34 _STATUS = 0
35
36 +ROOT_LOGGER = logging.getLogger()
37 +
38 +DEFAULT_DATE_FORMAT = '%F %H:%M:%S'
39 +DEFAULT_STREAM = sys.stdout
40 +
41 +def _zap_handlers():
42 + for h in ROOT_LOGGER.handlers:
43 + ROOT_LOGGER.removeHandler ( h )
44 +# --- end of _zap_handlers (...) ---
45 +
46 +def setup_initial_console():
47 + ch = logging.StreamHandler ( stream=DEFAULT_STREAM )
48 + ch.setLevel ( logging.WARN )
49 +
50 + ch.setFormatter (
51 + logging.Formatter (
52 + fmt='%(levelname)-7s [%(name)s] %(message)s'
53 + )
54 + )
55 +
56 + ROOT_LOGGER.addHandler ( ch )
57 + ROOT_LOGGER.setLevel ( logging.WARN )
58 +# --- end of setup_initial_console (...) ---
59 +
60 +def setup_console ( conf ):
61 + if not conf.get ( 'LOG.CONSOLE.enabled', False ): return
62 + stream = conf.get ( 'LOG.CONSOLE.stream', None )
63 +
64 + if stream is not None:
65 + if stream == 'stderr':
66 + stream = sys.stderr
67 + elif stream == 'stdout':
68 + stream = sys.stdout
69 + else:
70 + stream = None
71 +
72 + ch = logging.StreamHandler (
73 + stream=DEFAULT_STREAM if stream is None else stream
74 + )
75 +
76 + ch.setLevel (
77 + conf.get (
78 + 'LOG.CONSOLE.level',
79 + conf.get ( 'LOG.level', logging.INFO )
80 + )
81 + )
82 +
83 + ch_fmt = logging.Formatter (
84 + fmt=conf.get (
85 + 'LOG.CONSOLE.format',
86 + '%(levelname)-8s %(name)-14s: %(message)s'
87 + ),
88 + datefmt=conf.get ( 'LOG.date_format', DEFAULT_DATE_FORMAT )
89 + )
90 +
91 + ch.setFormatter ( ch_fmt )
92 +
93 + ROOT_LOGGER.addHandler ( ch )
94 +# --- end of setup_console (...) ---
95 +
96 +def setup_syslog ( conf ):
97 +# if not conf.get ( 'LOG.SYSLOG.enabled', False ): return
98 +#
99 +# lh = logging.handlers.SysLogHandler()
100 +#
101 +# lh.setLevel (
102 +# conf.get (
103 +# 'LOG.SYSLOG.level',
104 +# conf.get ( 'LOG.level', logging.CRITICAL )
105 +# )
106 +# )
107 +#
108 +# lh_fmt = I_DONT_KNOW
109 +#
110 +# lh.setFormatter ( lh_fmt )
111 +#
112 +# ROOT_LOGGER.addHandler ( lh )
113 +#
114 + pass
115 +# --- end of setup_syslog (...) ---
116 +
117 +def setup_file ( conf ):
118 + logfile = conf.get ( 'LOG.FILE.file' )
119 + if not logfile or not ( 'LOG.FILE.enabled', True ): return
120 +
121 + # FIXME explain this in config (and make it available)
122 + rotating = conf.get ( 'LOG.FILE.rotate', False )
123 +
124 + if rotating:
125 + # using per-run log files
126 +
127 + # rotate after handler creation if log file already exists
128 + rotate_now = os.path.exists ( logfile )
129 + fh = logging.handlers.RotatingFileHandler (
130 + logfile,
131 + backupCount=conf.get ( 'LOG.FILE.rotate_count', 3 )
132 + )
133 + if rotate_now:
134 + fh.doRollover()
135 + del rotate_now
136 + else:
137 + # using a big log file
138 + fh = logging.FileHandler ( logfile )
139 +
140 + fh.setLevel (
141 + conf.get (
142 + 'LOG.FILE.level',
143 + conf.get ( 'LOG.level', logging.WARN )
144 + )
145 + )
146 +
147 + fh_fmt = logging.Formatter (
148 + fmt=conf.get (
149 + 'LOG.FILE.format',
150 + '%(asctime)s %(levelname)-8s %(name)-10s: %(message)s'
151 + ),
152 + datefmt=conf.get ( 'LOG.date_format', DEFAULT_DATE_FORMAT )
153 + )
154 +
155 + fh.setFormatter ( fh_fmt )
156 +
157 + if conf.get ( 'LOG.FILE.buffered', True ):
158 + handler = logging.handlers.MemoryHandler (
159 + conf.get ( 'LOG.FILE.buffer_capacity', 250 ), # reasonable value?
160 + target=fh
161 + )
162 + else:
163 + handler = fh
164 +
165 + ROOT_LOGGER.addHandler ( handler )
166 +# --- end of setup_file (...) ---
167 +
168 +
169 def setup ( conf ):
170 global _STATUS
171 if _STATUS > 1:
172 return
173
174 - logging.basicConfig (
175 - level=logging.DEBUG,
176 - filename=conf.get ( [ 'LOG', 'FILE', 'main' ], 'roverlay.log' ),
177 - filemode='a',
178 - format='%(asctime)s %(levelname)-8s %(name)-14s -- %(message)s',
179 - datefmt='%F %H:%M:%S'
180 - )
181 + _zap_handlers()
182
183 - # add console output to the logger
184 - ch = logging.StreamHandler()
185 - ch.setLevel ( logging.DEBUG )
186 - ch.setFormatter (
187 - logging.Formatter ( '%(levelname)-8s %(name)-14s -- %(message)s' )
188 - )
189 - logging.getLogger().addHandler ( ch )
190 + if conf.get ( 'LOG.enabled', True ):
191 + setup_console ( conf )
192 + setup_file ( conf )
193 + #setup_syslog ( conf )
194 +
195 +
196 + if not ROOT_LOGGER.handlers:
197 + # logging is disabled, add a nop handler
198 + ROOT_LOGGER.addHandler ( logging.NullHandler() )
199 +
200 + ROOT_LOGGER.setLevel ( min ( h.level for h in ROOT_LOGGER.handlers ) )
201
202 _STATUS = 2
203
204 @@ -34,6 +168,9 @@ def setup_initial():
205 if _STATUS > 0:
206 return
207
208 - pass
209 + _zap_handlers()
210 + logging.lastResort = None
211 + logging.raiseExceptions = True
212 + setup_initial_console()
213
214 _STATUS = 1