美文网首页我的Python自学之路
Django 个人博客 - 日志器使用 - step3

Django 个人博客 - 日志器使用 - step3

作者: Spareribs | 来源:发表于2016-12-25 18:41 被阅读1087次

    1 知识点

    主要是使用日志记录各类运行信息,方便排错

    2 日志设置并测试

    在配置文件中定义handlers和loggers的类型【settings.py】

    # 自定义日志输出信息
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,
        'formatters': {  # 日志格式
            'standard': {
                # 2016-12-24 14:51:19,888 [Thread-2:7120] [blog.views:28] [views:index] [ERROR]- [Errno 2] No such file or directory: 'ss.txt'
                'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'}
    
        },
        'filters': {  # Filter 用于对从logger 传递给handler 的日志记录进行额外的控制。
        },
        'handlers': {
            'mail_admins': {  # 它将用邮件发送ERROR(和更高级)的消息到站点管理员
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler',
                'include_html': True,
            },
            'default': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': 'log/all.log',  # 日志输出文件位置
                'maxBytes': 1024 * 1024 * 5,  # 文件大小
                'backupCount': 5,  # 备份份数
                'formatter': 'standard',  # 使用哪种formatters日志格式
            },
            'error': {
                'level': 'ERROR',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': 'log/error.log',  # 日志输出文件位置
                'maxBytes': 1024 * 1024 * 5,  # 文件大小
                'backupCount': 5,  # 备份份数
                'formatter': 'standard',  # 这个handler 使用simple 输出格式。
            },
            'console': {  # 一个StreamHandler,它将打印DEBUG(和更高级)的消息到stderr。
                'level': 'DEBUG',  # DEBUG:用于调试目的的底层系统信息
                'class': 'logging.StreamHandler',
                'formatter': 'standard'  # 这个handler 使用simple 输出格式。
            },
            'request_handler': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': 'log/script.log',
                'maxBytes': 1024 * 1024 * 5,
                'backupCount': 5,
                'formatter': 'standard',
            },
            'scprits_handler': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': 'log/script.log',
                'maxBytes': 1024 * 1024 * 5,
                'backupCount': 5,
                'formatter': 'standard',
            }
        },
        'loggers': {
            'django': {  # django将DEBUG级以上的内容交给default和console
                'handlers': ['default', 'console'],
                'level': 'DEBUG',
                'propagate': False
            },
            'django.request': {  # django.request将DEBUG级别以上的内容交给request_handler
                'handlers': ['request_handler'],
                'level': 'DEBUG',
                'propagate': False,
            },
            'scripts': {  # scripts将INFO级别以上的内容交给scprits_handler
                'handlers': ['scprits_handler'],
                'level': 'INFO',
                'propagate': False
            },
            'blog.views': {  # blog.views将DEBUG级别以上的内容交给default和error
                'handlers': ['default', 'error'],
                'level': 'DEBUG',
                'propagate': True
            },
        }
    }
    
    

    在视图函数中使用并测试【views.py】

    import logging
    logging = logging.getLogger('blog.views')
    

    正常启动

    (env_py27_django_blog) D:\MaiZi_Edu\Dropbox\Maizi\Django_blog\django_blog>python manage.py runserver
    Performing system checks...
    
    System check identified no issues (0 silenced).
    2017-01-02 11:40:30,528 [Dummy-1:10040] [django.db.backends:89] [utils:execute] [DEBUG]- (0.005) QUERY = "\n            SELECT name, type FROM sqlite_master\n            WHERE type in ('table', 'view') AND NOT name='sqlite_sequence'\n            ORDER BY name" - PARAMS = (); args=None
    2017-01-02 11:40:30,558 [Dummy-1:10040] [django.db.backends:89] [utils:execute] [DEBUG]- (0.000) QUERY = u'SELECT "django_migrations"."app", "django_migrations"."name" FROM "django_migrations"' - PARAMS = (); args=()
    
    You have unapplied migrations; your app may not work properly until they are applied.
    Run 'python manage.py migrate' to apply them.
    January 02, 2017 - 11:40:30
    Django version 1.8.2, using settings 'django_blog.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CTRL-BREAK.
    

    3 测试异常捕获,并查看日志记录

    import logging
    from django.shortcuts import render
    
    logging = logging.getLogger('blog.views')
    
    
    # Create your views here.
    
    def index(request):
        try:
            file = open('ss.txt', 'r')
        except Exception as e:
            logging.error(e)
        return render(request, 'index.html', locals())
    

    日志记录如下:

    2016-12-24 14:47:51,405 [Thread-12:11256] [blog.views:28] [views:index] [ERROR]- [Errno 2] No such file or directory: 'ss.txt'
    2016-12-24 14:48:47,892 [Thread-2:5416] [blog.views:28] [views:index] [ERROR]- [Errno 2] No such file or directory: 'ss.txt'
    2016-12-24 14:51:19,888 [Thread-2:7120] [blog.views:28] [views:index] [ERROR]- [Errno 2] No such file or directory: 'ss.txt'
    

    4 遇到的问题

    4.1 文件夹权限不足,无法创建文件

    (env_py27_django_blog) D:\MaiZi_Edu\Dropbox\Maizi\Django_blog\django_blog>python manage.py runserver
    Traceback (most recent call last):
      File "manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "D:\virtualenv\env_py27_django_blog\lib\site-packages\django\core\management\__init__.py", line 338, in execute_from_command_line
        utility.execute()
      File "D:\virtualenv\env_py27_django_blog\lib\site-packages\django\core\management\__init__.py", line 312, in execute
        django.setup()
      File "D:\virtualenv\env_py27_django_blog\lib\site-packages\django\__init__.py", line 17, in setup
        configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
      File "D:\virtualenv\env_py27_django_blog\lib\site-packages\django\utils\log.py", line 86, in configure_logging
        logging_config_func(logging_settings)
      File "C:\Python27\Lib\logging\config.py", line 794, in dictConfig
        dictConfigClass(config).configure()
      File "C:\Python27\Lib\logging\config.py", line 576, in configure
        '%r: %s' % (name, e))
    ValueError: Unable to configure handler 'default': [Errno 2] No such file or directory: 'D:\\MaiZi_Edu\\Dropbox\\Maizi\\Django_blog\\django_blog\\log\\all.log'
    

    相关下载

    日志器使用_代码


    欢迎留言,博文会持续更新~~

    相关文章

      网友评论

        本文标题:Django 个人博客 - 日志器使用 - step3

        本文链接:https://www.haomeiwen.com/subject/gsldvttx.html