MCPcopy
hub / github.com/benoitc/gunicorn / Logger

Class Logger

gunicorn/glogging.py:164–483  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

162
163
164class Logger:
165
166 LOG_LEVELS = {
167 "critical": logging.CRITICAL,
168 "error": logging.ERROR,
169 "warning": logging.WARNING,
170 "info": logging.INFO,
171 "debug": logging.DEBUG
172 }
173 loglevel = logging.INFO
174
175 error_fmt = r"%(asctime)s [%(process)d] [%(levelname)s] %(message)s"
176 datefmt = r"[%Y-%m-%d %H:%M:%S %z]"
177
178 access_fmt = "%(message)s"
179 syslog_fmt = "[%(process)d] %(message)s"
180
181 atoms_wrapper_class = SafeAtoms
182
183 def __init__(self, cfg):
184 self.error_log = logging.getLogger("gunicorn.error")
185 self.error_log.propagate = False
186 self.access_log = logging.getLogger("gunicorn.access")
187 self.access_log.propagate = False
188 self.error_handlers = []
189 self.access_handlers = []
190 self.logfile = None
191 self.lock = threading.Lock()
192 self.cfg = cfg
193 self.setup(cfg)
194
195 def setup(self, cfg):
196 self.loglevel = self.LOG_LEVELS.get(cfg.loglevel.lower(), logging.INFO)
197 self.error_log.setLevel(self.loglevel)
198 self.access_log.setLevel(logging.INFO)
199
200 # set gunicorn.error handler
201 if self.cfg.capture_output and cfg.errorlog != "-":
202 for stream in sys.stdout, sys.stderr:
203 stream.flush()
204
205 self.logfile = open(cfg.errorlog, 'a+')
206 os.dup2(self.logfile.fileno(), sys.stdout.fileno())
207 os.dup2(self.logfile.fileno(), sys.stderr.fileno())
208
209 self._set_handler(self.error_log, cfg.errorlog,
210 logging.Formatter(self.error_fmt, self.datefmt))
211
212 # set gunicorn.access handler
213 if cfg.accesslog is not None:
214 self._set_handler(
215 self.access_log, cfg.accesslog,
216 fmt=logging.Formatter(self.access_fmt), stream=sys.stdout
217 )
218
219 # set syslog handler
220 if cfg.syslog:
221 self._set_syslog_handler(

Calls

no outgoing calls