django日志
首先在setting设置LOGGIN参数,主要设置
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'simple': {
'format': '[%(asctime)s] %(levelname)s : %(message)s'
},
'verbose': {
'format': '[%(asctime)s] %(levelname)s %(pathname)s line:%(lineno)s %(process)d [%(threadName)s] : %(message)s'
},
},
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
'infofile': {
'level': 'INFO',
'class': 'logging.FileHandler',
'formatter': 'simple',
'filename': BASE_DIR+'/logs/shop.log',
'mode': 'a',
},
'warnfile': {
'level': 'WARN',
'class': 'logging.FileHandler',
'formatter': 'verbose',
'filename': BASE_DIR + '/logs/error.log',
'mode': 'a',
},
'errorfile': {
'level': 'ERROR',
'class': 'logging.FileHandler',
'formatter': 'verbose',
'filename': BASE_DIR + '/logs/error.log',
'mode': 'a',
},
},
'loggers': {
'myshop': {
'handlers': ['console', 'infofile', 'warnfile', 'errorfile'],
'level': 'INFO',
'propagate': True,
},
},
}
在项目启动执行初始化
def setup(set_prefix=True):
"""
Configure the settings (this happens as a side effect of accessing the
first setting), configure logging and populate the app registry.
Set the thread-local urlresolvers script prefix if `set_prefix` is True.
"""
from django.apps import apps
from django.conf import settings
from django.urls import set_script_prefix
from django.utils.encoding import force_text
from django.utils.log import configure_logging
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
在settings对象的LOGGING_CONFIG
settings.LOGGING_CONFIG = 'logging.config.dictConfig'是一个函数,执行这个函数可以定义log的一些设置
代码如下
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
logging.config.dictConfig(config)
def configure_logging(logging_config, logging_settings):
if logging_config:
# First find the logging configuration function ...
logging_config_func = import_string(logging_config)
logging.config.dictConfig(DEFAULT_LOGGING)
# ... then invoke it with the logging settings
if logging_settings:
logging_config_func(logging_settings)
def dictConfig(config):
"""Configure logging using a dictionary."""
dictConfigClass(config).configure()
def configure(self):
"""Do the configuration."""
config = self.config
if 'version' not in config:
raise ValueError("dictionary doesn't specify a version")
if config['version'] != 1:
raise ValueError("Unsupported version: %s" % config['version'])
incremental = config.pop('incremental', False)
EMPTY_DICT = {}
logging._acquireLock()
try:
if incremental:
handlers = config.get('handlers', EMPTY_DICT)
for name in handlers:
if name not in logging._handlers:
raise ValueError('No handler found with '
'name %r' % name)
else:
try:
handler = logging._handlers[name]
handler_config = handlers[name]
level = handler_config.get('level', None)
if level:
handler.setLevel(logging._checkLevel(level))
except StandardError as e:
raise ValueError('Unable to configure handler '
'%r: %s' % (name, e))
loggers = config.get('loggers', EMPTY_DICT)
for name in loggers:
try:
self.configure_logger(name, loggers[name], True)
except StandardError as e:
raise ValueError('Unable to configure logger '
'%r: %s' % (name, e))
root = config.get('root', None)
if root:
try:
self.configure_root(root, True)
except StandardError as e:
raise ValueError('Unable to configure root '
'logger: %s' % e)
else:
disable_existing = config.pop('disable_existing_loggers', True)
logging._handlers.clear()
del logging._handlerList[:]
# Do formatters first - they don't refer to anything else
formatters = config.get('formatters', EMPTY_DICT)
for name in formatters:
try:
formatters[name] = self.configure_formatter(
formatters[name])
except StandardError as e:
raise ValueError('Unable to configure '
'formatter %r: %s' % (name, e))
# Next, do filters - they don't refer to anything else, either
filters = config.get('filters', EMPTY_DICT)
for name in filters:
try:
...
在项目中使用
import logging
logger = logging.getLogger('myshop')
logger.warning('数据库执行sql:{}异常,错误信息为:{}'.format(sql,e))
通过预定义的方式,在使用时直接用logger.logging.getLogger(name)
本文介绍了如何在Django项目中配置日志,包括在settings.py中设置LOGGING参数,以及项目启动时的日志初始化。同时,文章讲解了如何在项目代码中方便地使用logging模块,通过logger.logging.getLogger(name)获取日志记录器。
3734

被折叠的 条评论
为什么被折叠?



