成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python & django logging 小結(jié)

wangshijun / 2622人閱讀

摘要:小結(jié)基本一次配置多處生效高級(jí)會(huì)用到一個(gè)和信息有關(guān)的對(duì)象接口被應(yīng)用層我們開(kāi)發(fā)者調(diào)用的寫(xiě)文件的掛在上過(guò)濾文本的可以給用也可以給用定義的格式給用的格式時(shí)間格式分隔符例子詳細(xì)參數(shù)源碼里面有也可以看文檔返回或者將會(huì)被過(guò)濾可以是一個(gè)類也可以

python & django logging 小結(jié)

[TOC]

python 基本

一次配置,多處生效

import logging
logging.basicConfig(format="%(asctime)s %(message)s", datefmt="%m/%d/%Y %I:%M:%S %p")
logging.warning("is when this event was logged.")

>>>12/12/2010 11:46:36 AM is when this event was logged.
高級(jí)

log_record

filters會(huì)用到,一個(gè)和log信息有關(guān)的對(duì)象

loggers

接口,被應(yīng)用層(我們開(kāi)發(fā)者)調(diào)用的

handlers

寫(xiě)文件的,掛在logger上

filters

過(guò)濾文本的, 可以給logger用,也可以給handler用

formatters

定義log的格式, 給handler用

formatter

fmt

message的格式

datefmt

時(shí)間格式

style

分隔符

%(asctime)s - %(levelname)s - %(message)s

&(asctime)s - &(levelname)s - &(message)s

例子

my_formater = logging.Formatter(fmt="%(asctime)s - %(levelname)s - %(message)s", datefmt="%m/%d/%Y %I:%M:%S %p", style="%")

詳細(xì)參數(shù)

源碼里面有,也可以看文檔

filter

返回True或者False

False將會(huì)被過(guò)濾

可以是一個(gè)類,也可以是函數(shù).

建議用類的形式, 因?yàn)閹ame,將來(lái)想remove filter更方便

Filter類長(zhǎng)這樣

class Filter(object):
    def __init__(self, name=""):
        self.name = name
        self.nlen = len(name)
    def filter(self, record):
        return True

函數(shù)

def my_filter(record):
    return False

handler

logging模塊提供了很多handler.

logging.StreamHandler(sys.stdout)logging.RotatingFileHandler 常見(jiàn)

handler.addFilter()

handler.setFormatter()

my_handler.setLevel()

logger

定義logger

logger = logging.getLogger("666")

set level

logger.setLevel(logging.DEBUG)

logger.addFilter()

logger.addHandler()

logger.info("message")

例子
import logging
logger = logging.getLogger("spam_application")
logger.setLevel(logging.DEBUG)
my_handler = logging.StreamHandler()
my_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
my_handler.setFormatter(formatter)
logger.addHandler(my_handler)
logger.info("creating an instance of auxiliary_module.Auxiliary")
>>> 2019-07-03 16:02:30,952 - spam_application - INFO - creating an instance of auxiliary_module.Auxiliary
my_filter = lambda record: True
my_handler.addFilter(my_filter)
logger.info("creating an instance of auxiliary_module.Auxiliary")
>>> 2019-07-03 16:03:06,858 - spam_application - INFO - creating an instance of auxiliary_module.Auxiliary
my_filter = lambda record: False
my_handler.addFilter(my_filter)
logger.info("creating an instance of auxiliary_module.Auxiliary")
配置日志記錄

三種方式

像上面用方法配置

dict

LOGGING = {
    "version": 1,
    "disable_existing_loggers": True,
    "formatters": {
        "standard": {
            "format": "[%(asctime)s][%(filename)s] - %(funcName)s[line:%(lineno)d] - [%(levelname)s]: %(message)s"
        },
    },
    "filters": {
    },
    "handlers": {
        "security_log": {
            "level": "DEBUG",
            "class": "logging.handlers.RotatingFileHandler",
            "filename": os.path.join(cf["log"]["path"], "security_log.log"),
            "maxBytes": 1024 * 1024 * 10,
            "backupCount": 10,
            "formatter": "standard",
        },
        "event_log": {
            "level": "DEBUG",
            "class": "logging.handlers.RotatingFileHandler",
            "filename": os.path.join(cf["log"]["path"], "event_log.log"),
            "maxBytes": 1024 * 1024 * 10,
            "backupCount": 10,
            "formatter": "standard",
        },
        "console": {
            "level": "ERROR",
            "class": "logging.StreamHandler",
            "formatter": "standard"
        },
    },
    "loggers": {
        "eventLog": {
            "handlers": ["event_log", "console"],
            "level": "DEBUG",
            "propagate": False
        },
        "security": {
            "handlers": ["security_log", "console", "security_db"],
            "level": "DEBUG",
            "propagate": False
        },
        "system": {
            "handlers": ["system_log", "console", "system_db"],
            "level": "DEBUG",
            "propagate": False
        },
    }
}

file

django

django默認(rèn)使用dict方式.

logging_settings == settings.LOGGING

logging_config == logging.config.dictConfig

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)
例子

理想情況下,如果在settings中配置了LOGGING,直接使用即可.

# import the logging library
import logging

# Get an instance of a logger
logger = logging.getLogger(__name__)

def my_view(request, arg1, arg):
    ...
    if bad_mojo:
        # Log an error message
        logger.error("Something went wrong!")
最佳實(shí)踐

disable_existing_loggers == False

django本身是有一個(gè)logging配置的,這里有一個(gè)標(biāo)志位去決定是否需要取消掉.

靈活運(yùn)用propagatelogging.getLogger(__name__)

通過(guò) . 找父親.

"a.b" 是 ‘a(chǎn).b.c’的父親. ‘a(chǎn).b’是logger name

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/45064.html

相關(guān)文章

  • 運(yùn)用Python建立第一位Django架構(gòu)程序流程

      本文主要是闡述了運(yùn)用Python建立第一位Django架構(gòu)程序流程,文章內(nèi)容緊扣主題進(jìn)行詳盡的基本介紹,具有很強(qiáng)的實(shí)用價(jià)值,感興趣的朋友可以了解一下  一.系統(tǒng)變量  鼠標(biāo)右鍵電腦–>>特性–>>高端系統(tǒng)配置–>>高端–>>系統(tǒng)變量–>>  設(shè)定PATH特...

    89542767 評(píng)論0 收藏0
  • Django使用mysqlclient服務(wù)連接并寫(xiě)入數(shù)據(jù)庫(kù)的操作過(guò)程

      Django對(duì)于專業(yè)人士來(lái)說(shuō),應(yīng)該是不會(huì)陌生的,那么,他們平常中都會(huì)應(yīng)用到什么呢?主要還是應(yīng)用到mysqlclient,使用mysqlclient服務(wù)連接并寫(xiě)入數(shù)據(jù)庫(kù),具體的內(nèi)容,下面給大家詳細(xì)解答一下。  Django使用mysqlclient服務(wù)連接并寫(xiě)入數(shù)據(jù)庫(kù)  準(zhǔn)備  1.創(chuàng)建Django程序,安裝Django服務(wù)(詳情請(qǐng)看上上節(jié))  2.創(chuàng)建子應(yīng)用(詳情請(qǐng)看上上節(jié))  3.連接數(shù)據(jù)庫(kù)...

    89542767 評(píng)論0 收藏0
  • Django定時(shí)任務(wù)Django-crontab的使用方法介紹

      Python中的功能還是相當(dāng)?shù)亩嗟?,比如,?huì)涉及到使用Django定時(shí)任務(wù),在工作當(dāng)中,它的用途是比較的多的,其中,測(cè)試工程師用到這種的功能是比較多,所以我們要去進(jìn)行詳細(xì)的了解下,下面就給大家詳細(xì)的解答下。  在使用的django做測(cè)試平臺(tái)時(shí),,多多少少都會(huì)遇到需要定時(shí)任務(wù)的功能,比如定時(shí)執(zhí)行任務(wù),檢查訂單之類的??赡苁且欢螘r(shí)間,比如每隔10分鐘執(zhí)行一次,也可能是定點(diǎn)時(shí)間,比如14:00執(zhí)行,...

    89542767 評(píng)論0 收藏0
  • 使用Django+Pytest,教你搭建在線自動(dòng)化測(cè)試平臺(tái)

      小編寫(xiě)這篇文章的主要目的,就是教給大家,如何使用Django+Pytest,并用Django+Pytest搭建在線自動(dòng)化測(cè)試平臺(tái),具體怎么做呢?下面給大家做一個(gè)詳細(xì)的解答?! ∫?、測(cè)試平臺(tái):  解決分散用例執(zhí)行方式,提供統(tǒng)一測(cè)試用例執(zhí)行過(guò)程、用例管理、測(cè)試報(bào)告  主要是基于:  fastapi+vue.js  django+vue.js  django  二、搭建過(guò)程  2.1使用django...

    89542767 評(píng)論0 收藏0
  • Django中celery的使用項(xiàng)目實(shí)例

      小編寫(xiě)這篇文章的主要目的,主要是給大家去進(jìn)行講解Django項(xiàng)目實(shí)例情況,包括celery的一些具體使用情況介紹,學(xué)習(xí)這些的話,對(duì)我們的工作和生活幫助還是很大的,但是怎么樣才能夠更快的進(jìn)行上手呢?下面就一個(gè)具體實(shí)例給大家進(jìn)行解答?! ?、django應(yīng)用Celery  django框架請(qǐng)求/響應(yīng)的過(guò)程是同步的,框架本身無(wú)法實(shí)現(xiàn)異步響應(yīng)?! 〉俏覀?cè)陧?xiàng)目過(guò)程中會(huì)經(jīng)常會(huì)遇到一些耗時(shí)的任務(wù),比如:...

    89542767 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<