mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
modify log_file option
Gunicorn should generally only bother writing its own log and let the application handle the way it want to log its own errors. Now the log_file option will be overriden by the gunicorn options `--error-logfile` and `--access-logfile` if they are given.
This commit is contained in:
parent
5fb4b49a91
commit
a0ccfa0c4f
@ -46,3 +46,33 @@ class=logging.Formatter
|
|||||||
[formatter_access]
|
[formatter_access]
|
||||||
format=%(message)s
|
format=%(message)s
|
||||||
class=logging.Formatter
|
class=logging.Formatter
|
||||||
|
2014-01-01 14:30:00 [15391] [INFO] Starting gunicorn 18.2
|
||||||
|
2014-01-01 14:30:00 [15391] [INFO] Listening at: http://127.0.0.1:8000 (15391)
|
||||||
|
2014-01-01 14:30:00 [15391] [INFO] Using worker: sync
|
||||||
|
2014-01-01 14:30:00 [15395] [INFO] Booting worker with pid: 15395
|
||||||
|
2014-01-01 14:30:00 [15396] [INFO] Booting worker with pid: 15396
|
||||||
|
2014-01-01 14:30:00 [15397] [INFO] Booting worker with pid: 15397
|
||||||
|
2014-01-01 14:30:02 [15397] [INFO] Worker exiting (pid: 15397)
|
||||||
|
2014-01-01 14:30:02 [15396] [INFO] Worker exiting (pid: 15396)
|
||||||
|
2014-01-01 14:30:02 [15391] [INFO] Handling signal: int
|
||||||
|
2014-01-01 14:30:02 [15391] [INFO] Shutting down: Master
|
||||||
|
2014-01-01 14:31:36 [15399] [INFO] Starting gunicorn 18.2
|
||||||
|
2014-01-01 14:31:36 [15399] [INFO] Listening at: http://127.0.0.1:8000 (15399)
|
||||||
|
2014-01-01 14:31:36 [15399] [INFO] Using worker: sync
|
||||||
|
2014-01-01 14:31:36 [15402] [INFO] Booting worker with pid: 15402
|
||||||
|
2014-01-01 14:31:36 [15403] [INFO] Booting worker with pid: 15403
|
||||||
|
2014-01-01 14:31:36 [15404] [INFO] Booting worker with pid: 15404
|
||||||
|
2014-01-01 14:31:37 [15403] [INFO] Worker exiting (pid: 15403)
|
||||||
|
2014-01-01 14:31:37 [15404] [INFO] Worker exiting (pid: 15404)
|
||||||
|
2014-01-01 14:31:37 [15399] [INFO] Handling signal: int
|
||||||
|
2014-01-01 14:31:37 [15399] [INFO] Shutting down: Master
|
||||||
|
2014-01-01 14:32:18 [15405] [INFO] Starting gunicorn 18.2
|
||||||
|
2014-01-01 14:32:18 [15405] [INFO] Listening at: http://127.0.0.1:8000 (15405)
|
||||||
|
2014-01-01 14:32:18 [15405] [INFO] Using worker: sync
|
||||||
|
2014-01-01 14:32:18 [15408] [INFO] Booting worker with pid: 15408
|
||||||
|
2014-01-01 14:32:18 [15409] [INFO] Booting worker with pid: 15409
|
||||||
|
2014-01-01 14:32:18 [15410] [INFO] Booting worker with pid: 15410
|
||||||
|
2014-01-01 14:32:20 [15410] [INFO] Worker exiting (pid: 15410)
|
||||||
|
2014-01-01 14:32:20 [15409] [INFO] Worker exiting (pid: 15409)
|
||||||
|
2014-01-01 14:32:20 [15405] [INFO] Handling signal: int
|
||||||
|
2014-01-01 14:32:20 [15405] [INFO] Shutting down: Master
|
||||||
|
|||||||
@ -983,7 +983,7 @@ class ErrorLog(Setting):
|
|||||||
cli = ["--error-logfile", "--log-file"]
|
cli = ["--error-logfile", "--log-file"]
|
||||||
meta = "FILE"
|
meta = "FILE"
|
||||||
validator = validate_string
|
validator = validate_string
|
||||||
default = "-"
|
default = None
|
||||||
desc = """\
|
desc = """\
|
||||||
The Error log file to write to.
|
The Error log file to write to.
|
||||||
|
|
||||||
@ -1039,10 +1039,11 @@ class LogConfig(Setting):
|
|||||||
validator = validate_string
|
validator = validate_string
|
||||||
default = None
|
default = None
|
||||||
desc = """\
|
desc = """\
|
||||||
The log config file to use.
|
The log config file to use.
|
||||||
Gunicorn uses the standard Python logging module's Configuration
|
Gunicorn uses the standard Python logging module's Configuration
|
||||||
file format.
|
file format.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class SyslogTo(Setting):
|
class SyslogTo(Setting):
|
||||||
name = "syslog_addr"
|
name = "syslog_addr"
|
||||||
|
|||||||
@ -13,7 +13,6 @@ import sys
|
|||||||
import traceback
|
import traceback
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
|
|
||||||
from gunicorn import util
|
from gunicorn import util
|
||||||
from gunicorn.six import string_types
|
from gunicorn.six import string_types
|
||||||
|
|
||||||
@ -168,40 +167,40 @@ class Logger(object):
|
|||||||
self.setup(cfg)
|
self.setup(cfg)
|
||||||
|
|
||||||
def setup(self, cfg):
|
def setup(self, cfg):
|
||||||
if not cfg.logconfig:
|
loglevel = self.LOG_LEVELS.get(cfg.loglevel.lower(), logging.INFO)
|
||||||
loglevel = self.LOG_LEVELS.get(cfg.loglevel.lower(), logging.INFO)
|
self.error_log.setLevel(loglevel)
|
||||||
self.error_log.setLevel(loglevel)
|
self.access_log.setLevel(logging.INFO)
|
||||||
self.access_log.setLevel(logging.INFO)
|
|
||||||
|
|
||||||
if cfg.errorlog != "-":
|
if cfg.errorlog != "-":
|
||||||
# if an error log file is set redirect stdout & stderr to
|
# if an error log file is set redirect stdout & stderr to
|
||||||
# this log file.
|
# this log file.
|
||||||
for stream in sys.stdout, sys.stderr:
|
for stream in sys.stdout, sys.stderr:
|
||||||
stream.flush()
|
stream.flush()
|
||||||
|
|
||||||
self.logfile = open(cfg.errorlog, 'a+')
|
self.logfile = open(cfg.errorlog, 'a+')
|
||||||
os.dup2(self.logfile.fileno(), sys.stdout.fileno())
|
os.dup2(self.logfile.fileno(), sys.stdout.fileno())
|
||||||
os.dup2(self.logfile.fileno(), sys.stderr.fileno())
|
os.dup2(self.logfile.fileno(), sys.stderr.fileno())
|
||||||
|
|
||||||
# set gunicorn.error handler
|
# set gunicorn.error handler
|
||||||
self._set_handler(self.error_log, cfg.errorlog,
|
self._set_handler(self.error_log, cfg.errorlog,
|
||||||
logging.Formatter(self.error_fmt, self.datefmt))
|
logging.Formatter(self.error_fmt, self.datefmt))
|
||||||
|
|
||||||
# set gunicorn.access handler
|
# set gunicorn.access handler
|
||||||
if cfg.accesslog is not None:
|
if cfg.accesslog is not None:
|
||||||
self._set_handler(self.access_log, cfg.accesslog,
|
self._set_handler(self.access_log, cfg.accesslog,
|
||||||
fmt=logging.Formatter(self.access_fmt))
|
fmt=logging.Formatter(self.access_fmt))
|
||||||
|
|
||||||
# set syslog handler
|
# set syslog handler
|
||||||
if cfg.syslog:
|
if cfg.syslog:
|
||||||
self._set_syslog_handler(self.error_log, cfg, self.syslog_fmt)
|
self._set_syslog_handler(self.error_log, cfg, self.syslog_fmt)
|
||||||
|
|
||||||
else:
|
if cfg.logconfig:
|
||||||
if os.path.exists(cfg.logconfig):
|
if os.path.exists(cfg.logconfig):
|
||||||
fileConfig(cfg.logconfig, defaults=CONFIG_DEFAULTS,
|
fileConfig(cfg.logconfig, defaults=CONFIG_DEFAULTS,
|
||||||
disable_existing_loggers=False)
|
disable_existing_loggers=False)
|
||||||
else:
|
else:
|
||||||
raise RuntimeError("Error: log config '%s' not found" % cfg.logconfig)
|
raise RuntimeError("Error: log config '%s' not found" %
|
||||||
|
cfg.logconfig)
|
||||||
|
|
||||||
def critical(self, msg, *args, **kwargs):
|
def critical(self, msg, *args, **kwargs):
|
||||||
self.error_log.critical(msg, *args, **kwargs)
|
self.error_log.critical(msg, *args, **kwargs)
|
||||||
@ -334,15 +333,16 @@ class Logger(object):
|
|||||||
if h:
|
if h:
|
||||||
log.handlers.remove(h)
|
log.handlers.remove(h)
|
||||||
|
|
||||||
if output == "-":
|
if output is not None:
|
||||||
h = logging.StreamHandler()
|
if output == "-":
|
||||||
else:
|
h = logging.StreamHandler()
|
||||||
util.check_is_writeable(output)
|
else:
|
||||||
h = logging.FileHandler(output)
|
util.check_is_writeable(output)
|
||||||
|
h = logging.FileHandler(output)
|
||||||
|
|
||||||
h.setFormatter(fmt)
|
h.setFormatter(fmt)
|
||||||
h._gunicorn = True
|
h._gunicorn = True
|
||||||
log.addHandler(h)
|
log.addHandler(h)
|
||||||
|
|
||||||
def _set_syslog_handler(self, log, cfg, fmt):
|
def _set_syslog_handler(self, log, cfg, fmt):
|
||||||
# setup format
|
# setup format
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user