文档章节

02、django-logging配置和使用

_Change_
 _Change_
发布于 2015/09/25 14:40
字数 726
阅读 43
收藏 0

django中的日志使用

django中的app里面的py文件会自动寻找父目录的logger,所以配置了app后只需要使用__name__即可.而非app的文件(自定义文件)则需要显式的调用logger的名称使用(下面结构中的tools和handler)

使用方法:

  • settings中配置logging参数(以时间/每天 切割日志)

  • 在下面的loggers中定义了app名称.所有该app下面的py文件的用发是:

import logging
logger = logging.getLogger(__name__)
  • celery等其他logging配置按其他模块自定义
  • 其他文件夹(自己定义的公共文件),譬如下面结构中的tools、handler等文件夹中的用法:
import logging
logger = logging.getLogger("handler")

文件结构

Ares
├── README.md
├── __pycache__
│   └── manage.cpython-37.pyc
├── ares
│   ├── __init__.py
│   ├── __pycache__
│   ├── celery.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── database
│   ├── okr_2018-09-10.sql
├── db.sqlite3
├── excel_data
│   ├── __init__.py
│   ├── __pycache__
│   └── template.xls
├── handler
│   ├── __init__.py
│   ├── __pycache__
│   ├── api.py
│   ├── api_detail.py
│   ├── auto_view.py
│   ├── messages.py
│   ├── okr_result.py
│   ├── opm.py
│   ├── performance.py
│   ├── personal.py
│   ├── project.py
│   ├── sector.py
│   ├── sql_manage.py
│   ├── sql_server.py
│   ├── supervisor.py
│   ├── team.py
│   ├── tpo_order.sql
│   └── tpo_tools.py
├── log
│   ├── celery.log
│   ├── celery_tasks.log
│   ├── default.log
│   ├── default.log.2018-12-26
│   ├── error.log
│   ├── script.log
│   └── script.log.2018-12-26
├── manage.py
├── mock
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── serializers.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── okr
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── okr_middleware.py
│   ├── serializers.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── okr_rest
│   ├── Permissions.py
│   ├── __init__.py
│   ├── __pycache__
│   ├── admin.py
│   ├── apps.py
│   ├── dispath.py
│   ├── exc.py
│   ├── management
│   ├── migrations
│   ├── models.py
│   ├── serializers.py
│   ├── test.py
│   ├── urls.py
│   └── views.py
├── pylintrc
├── requirements.txt
├── static
│   ├── avatar
│   ├── css
│   ├── docs
│   ├── files
│   ├── fonts
│   ├── images
│   ├── img
│   ├── js
│   ├── plugins
│   └── video
├── templates
│   ├── 404.html
│   ├── Home.html
│   ├── api.html
├── tool_site
│   ├── __init__.py
│   ├── __pycache__
│   ├── _gevent.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── serializers.py
│   ├── tasks.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── tools
│   ├── __init__.py
│   ├── __pycache__
│   ├── deco.py
│   ├── exc.py
│   ├── rest_utils.py
│   ├── utils.py
│   └── widget.py
└── uwsgi.ini

logging配置:

def get_log(name):
    log_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "log")
    if not os.path.exists(log_path):
        os.makedirs(log_path)
    return os.path.join(log_path, name)


LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "root": {
        "level": "WARNING",
        "handlers": ["sentry"],
    },
    "formatters": {
        "standard": {
            "format": "%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] "
                      "[%(levelname)s]- %(message)s"
        }
    },
    "filters": {},
    "handlers": {
        "sentry": {
            "level": "ERROR",
            "class": "raven.contrib.django.raven_compat.handlers.SentryHandler",
            "tags": {"custom-tag": "x"},
        },
        "mail_admins": {
            "level": "ERROR",
            "class": "django.utils.log.AdminEmailHandler",
            "include_html": True,
        },
        "console": {
            "level": "INFO",
            "class": "logging.StreamHandler",
            "formatter": "standard",
        },
        "default": {
            "level": "DEBUG",
            "class": "logging.handlers.TimedRotatingFileHandler",
            "filename": get_log("default.log"),
            'when': 'midnight',
            'interval': 1,
            'backupCount': 100,
            'formatter': 'standard'
        },
        "error": {
            "level": "ERROR",
            "class": "logging.handlers.TimedRotatingFileHandler",
            "filename": get_log("error.log"),
            'when': 'midnight',
            'interval': 1,
            'backupCount': 100,
            'formatter': 'standard'
        },

        "request_handler": {
            "level": "DEBUG",
            "class": "logging.handlers.TimedRotatingFileHandler",
            "filename": get_log("script.log"),
            'when': 'midnight',
            'interval': 1,
            'backupCount': 100,
            'formatter': 'standard'
        },
        "script_handler": {
            "level": "DEBUG",
            "class": "logging.handlers.TimedRotatingFileHandler",
            "filename": get_log("script.log"),
            'when': 'midnight',
            'interval': 1,
            'backupCount': 100,
            'formatter': 'standard'
        },
        "celery_logger": {
            "level": "INFO",
            "class": "logging.handlers.TimedRotatingFileHandler",
            "filename": get_log("celery.log"),
            'when': 'midnight',
            'interval': 1,
            'backupCount': 100,
            'formatter': 'standard'
        },
        "celery_task_logger": {
            "level": "INFO",
            "class": "logging.handlers.TimedRotatingFileHandler",
            "filename": get_log("celery_tasks.log"),
            'when': 'midnight',
            'interval': 1,
            'backupCount': 100,
            'formatter': 'standard'
        },
    },
    "loggers": {
        "django": {
            "handlers": ["default", "console"],
            "level": "DEBUG",
            "propagate": False,
        },
        "django.request": {
            "handlers": ["request_handler"],
            "level": "DEBUG",
            "propagate": False,
        },
        "scripts": {
            "handlers": ["script_handler"],
            "level": "INFO",
            "propagate": False,
        },
        "raven": {
            "level": "ERROR",
            "handlers": ["console"],
            "propagate": False,
        },
        "sentry.errors": {
            "level": "DEBUG",
            "handlers": ["console"],
            "propagate": False,
        },
        # celery task.py文件配置
        "tool_site.tasks": {
            "handlers": ["celery_task_logger"],
            "level": "INFO",
            "propagate": True,
        },
        # celery logging配置
        "celery": {
            "handlers": ["celery_logger"],
            "level": "INFO",
            "propagate": True,
        },
        # 自定义文件夹
        "tools": {
            "handlers": ["default", "console", "error"],
            "level": "INFO",
            "propagate": True,
        },
        "handler": {
            "handlers": ["default", "console", "error"],
            "level": "INFO",
            "propagate": True,
        },
        # 下面你的App,所有该App下的py文件都会使用配置
        "okr": {
            "handlers": ["default", "console", "error"],
            "level": "INFO",
            "propagate": True,
        },
        "tool_site": {
            "handlers": ["default", "console", "error"],
            "level": "INFO",
            "propagate": True,
        },
        "mock": {
            "handlers": ["default", "console", "error"],
            "level": "INFO",
            "propagate": True,
        },
        "okr_rest": {
            "handlers": ["default", "console", "error"],
            "level": "INFO",
            "propagate": True,
        },
    },
}

© 著作权归作者所有

_Change_
粉丝 19
博文 148
码字总数 83915
作品 0
普陀
QA/测试工程师
私信 提问
在django中使用logging模块

logging是Python 2.3起自带的标准模块,可以用来从运行状态的程序中记录日志。logging模块的功能非常强大,可以非常灵活的向各种预定或者自定的目标输出日志。而利用标准的logging模块,Dja...

picpld
2012/11/30
3.4K
0
django 日志默认打印 request 请求信息

django 日志默认打印 request 请求信息 需求 请求view中手动打印日志时中插入request的如下信息(每个request请求都记录可以使用中间件进行解决,但这里仅仅是在需要的地方手动打印): 旧的...

歪文
01/08
0
0
Python logging 库的『完整教程』

前言 本文的标题是『完整』。所谓『完整』,大意是想表达:提炼出一组最小的经验组合,并且能够快速应用于工程中,能 work,甚至能完美地 work。这篇文章就是想要做到『如何能完美地work』。...

浮生若梦的编程
2018/10/30
0
0
django 自定义日志配置

可参考的连接http://www.cnblogs.com/qwj-sysu/p/4218536.htmlhttp://davidbj.blog.51cto.com/4159484/1433741import loggingimport django.utils.logimport logging.handlers LOGGING = { }......

雪地花露
2016/05/25
93
0
七日Python之路--第九天

众所周知,代码这东西不是看出来的。程序这东西只哟一个标准。 下面找点开源的东西看看,学习一下大婶们的犀利编码...... 推荐一下: 虽然有点老了:http://www.iteye.com/topic/405150,还有...

明天以后
2014/07/29
153
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
676
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
39
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
25
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
72
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
69
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部