django日志

本文介绍了如何在Django项目中配置日志,包括在settings.py中设置LOGGING参数,以及项目启动时的日志初始化。同时,文章讲解了如何在项目代码中方便地使用logging模块,通过logger.logging.getLogger(name)获取日志记录器。

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值