mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
added capability to take JSON as log's config
This commit is contained in:
parent
c66957bbe9
commit
e98f6a039c
@ -264,6 +264,16 @@ 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.
|
||||||
|
|
||||||
|
.. _logconfig-json:
|
||||||
|
|
||||||
|
logiconfig_json
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
* ``--log-config-json FILE``
|
||||||
|
* ``None``
|
||||||
|
|
||||||
|
The log config file written in JSON.
|
||||||
|
|
||||||
.. _logconfig-dict:
|
.. _logconfig-dict:
|
||||||
|
|
||||||
logconfig_dict
|
logconfig_dict
|
||||||
@ -274,8 +284,9 @@ logconfig_dict
|
|||||||
|
|
||||||
The log config dictionary to use, using the standard Python
|
The log config dictionary to use, using the standard Python
|
||||||
logging module's dictionary configuration format. This option
|
logging module's dictionary configuration format. This option
|
||||||
takes precedence over the :ref:`logconfig` option, which uses the
|
takes precedence over the :ref:`logconfig` and :ref:`logConfigJson` options, which uses the
|
||||||
older file configuration format.
|
older file configuration format and JSON respectively.
|
||||||
|
|
||||||
|
|
||||||
Format: https://docs.python.org/3/library/logging.config.html#logging.config.dictConfig
|
Format: https://docs.python.org/3/library/logging.config.html#logging.config.dictConfig
|
||||||
|
|
||||||
@ -1173,11 +1184,11 @@ libraries may be installed using setuptools' ``extra_require`` feature.
|
|||||||
A string referring to one of the following bundled classes:
|
A string referring to one of the following bundled classes:
|
||||||
|
|
||||||
* ``sync``
|
* ``sync``
|
||||||
* ``eventlet`` - Requires eventlet >= 0.9.7 (or install it via
|
* ``eventlet`` - Requires eventlet >= 0.9.7 (or install it via
|
||||||
``pip install gunicorn[eventlet]``)
|
``pip install gunicorn[eventlet]``)
|
||||||
* ``gevent`` - Requires gevent >= 0.13 (or install it via
|
* ``gevent`` - Requires gevent >= 0.13 (or install it via
|
||||||
``pip install gunicorn[gevent]``)
|
``pip install gunicorn[gevent]``)
|
||||||
* ``tornado`` - Requires tornado >= 0.2 (or install it via
|
* ``tornado`` - Requires tornado >= 0.2 (or install it via
|
||||||
``pip install gunicorn[tornado]``)
|
``pip install gunicorn[tornado]``)
|
||||||
* ``gthread`` - Python 2 requires the futures package to be installed
|
* ``gthread`` - Python 2 requires the futures package to be installed
|
||||||
(or install it via ``pip install gunicorn[gthread]``)
|
(or install it via ``pip install gunicorn[gthread]``)
|
||||||
|
|||||||
@ -627,11 +627,11 @@ class WorkerClass(Setting):
|
|||||||
A string referring to one of the following bundled classes:
|
A string referring to one of the following bundled classes:
|
||||||
|
|
||||||
* ``sync``
|
* ``sync``
|
||||||
* ``eventlet`` - Requires eventlet >= 0.9.7 (or install it via
|
* ``eventlet`` - Requires eventlet >= 0.9.7 (or install it via
|
||||||
``pip install gunicorn[eventlet]``)
|
``pip install gunicorn[eventlet]``)
|
||||||
* ``gevent`` - Requires gevent >= 0.13 (or install it via
|
* ``gevent`` - Requires gevent >= 0.13 (or install it via
|
||||||
``pip install gunicorn[gevent]``)
|
``pip install gunicorn[gevent]``)
|
||||||
* ``tornado`` - Requires tornado >= 0.2 (or install it via
|
* ``tornado`` - Requires tornado >= 0.2 (or install it via
|
||||||
``pip install gunicorn[tornado]``)
|
``pip install gunicorn[tornado]``)
|
||||||
* ``gthread`` - Python 2 requires the futures package to be installed
|
* ``gthread`` - Python 2 requires the futures package to be installed
|
||||||
(or install it via ``pip install gunicorn[gthread]``)
|
(or install it via ``pip install gunicorn[gthread]``)
|
||||||
@ -668,7 +668,7 @@ class WorkerThreads(Setting):
|
|||||||
If it is not defined, the default is ``1``.
|
If it is not defined, the default is ``1``.
|
||||||
|
|
||||||
This setting only affects the Gthread worker type.
|
This setting only affects the Gthread worker type.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
If you try to use the ``sync`` worker type and set the ``threads``
|
If you try to use the ``sync`` worker type and set the ``threads``
|
||||||
setting to more than 1, the ``gthread`` worker type will be used
|
setting to more than 1, the ``gthread`` worker type will be used
|
||||||
@ -1368,8 +1368,8 @@ class LogConfigDict(Setting):
|
|||||||
desc = """\
|
desc = """\
|
||||||
The log config dictionary to use, using the standard Python
|
The log config dictionary to use, using the standard Python
|
||||||
logging module's dictionary configuration format. This option
|
logging module's dictionary configuration format. This option
|
||||||
takes precedence over the :ref:`logconfig` option, which uses the
|
takes precedence over the :ref:`logconfig` and :ref:`logConfigJson` options, which uses the
|
||||||
older file configuration format.
|
older file configuration format and JSON respectively.
|
||||||
|
|
||||||
Format: https://docs.python.org/3/library/logging.config.html#logging.config.dictConfig
|
Format: https://docs.python.org/3/library/logging.config.html#logging.config.dictConfig
|
||||||
|
|
||||||
@ -1377,6 +1377,22 @@ class LogConfigDict(Setting):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class LogConfigJson(Setting):
|
||||||
|
name = "logconfig_json"
|
||||||
|
section = "Logging"
|
||||||
|
cli = ["--log-config-json"]
|
||||||
|
meta = "FILE"
|
||||||
|
validator = validate_string
|
||||||
|
default = None
|
||||||
|
desc = """\
|
||||||
|
The log config JSON reads config from a JSON file
|
||||||
|
|
||||||
|
Format: https://docs.python.org/3/library/logging.config.html#logging.config.dictConfig
|
||||||
|
|
||||||
|
.. versionadded:: 19.9
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class SyslogTo(Setting):
|
class SyslogTo(Setting):
|
||||||
name = "syslog_addr"
|
name = "syslog_addr"
|
||||||
section = "Logging"
|
section = "Logging"
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
import base64
|
import base64
|
||||||
import binascii
|
import binascii
|
||||||
|
import json
|
||||||
import time
|
import time
|
||||||
import logging
|
import logging
|
||||||
logging.Logger.manager.emittedNoHandlerWarning = 1
|
logging.Logger.manager.emittedNoHandlerWarning = 1
|
||||||
@ -238,6 +239,21 @@ class Logger(object):
|
|||||||
TypeError
|
TypeError
|
||||||
) as exc:
|
) as exc:
|
||||||
raise RuntimeError(str(exc))
|
raise RuntimeError(str(exc))
|
||||||
|
elif cfg.logconfig_json:
|
||||||
|
config = CONFIG_DEFAULTS.copy()
|
||||||
|
if os.path.exists(cfg.logconfig_json):
|
||||||
|
try:
|
||||||
|
config_json = json.load(open(cfg.logconfig_json))
|
||||||
|
config.update(config_json)
|
||||||
|
dictConfig(config)
|
||||||
|
except(
|
||||||
|
json.JSONDecodeError,
|
||||||
|
AttributeError,
|
||||||
|
ImportError,
|
||||||
|
ValueError,
|
||||||
|
TypeError
|
||||||
|
) as exc:
|
||||||
|
raise RuntimeError(str(exc))
|
||||||
elif cfg.logconfig:
|
elif cfg.logconfig:
|
||||||
if os.path.exists(cfg.logconfig):
|
if os.path.exists(cfg.logconfig):
|
||||||
defaults = CONFIG_DEFAULTS.copy()
|
defaults = CONFIG_DEFAULTS.copy()
|
||||||
@ -330,7 +346,7 @@ class Logger(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if not (self.cfg.accesslog or self.cfg.logconfig or
|
if not (self.cfg.accesslog or self.cfg.logconfig or
|
||||||
self.cfg.logconfig_dict or
|
self.cfg.logconfig_dict or self.cfg.logconfig_json or
|
||||||
(self.cfg.syslog and not self.cfg.disable_redirect_access_to_syslog)):
|
(self.cfg.syslog and not self.cfg.disable_redirect_access_to_syslog)):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user