Python日誌(logging)模塊使用方法簡介

介紹

A logger is configured to have a log level. This log level describes the severity of the messages that the logger will handle. Python defines the following log levels:

§ DEBUG: Low level system information for debugging purposes

§ INFO: General system information

§ WARNING: Information describing a minor problem that has occurred.

§ ERROR: Information describing a major problem that has occurred.

§ CRITICAL: Information describing a critical problem that has occurred.

Each message that is written to the logger is a Log Record. Each log record also has a log level indicating the severity of that specific message. A log record can also contain useful metadata that describes the event that is being logged. This can include details such as a stack trace or an error code.

When a message is given to the logger, the log level of the message is compared to the log level of the logger. If the log level of the message meets or exceeds the log level of the logger itself, the message will undergo further processing. If it doesn’t, the message will be ignored.

Once a logger has determined that a message needs to be processed, it is passed to a Handler.

(來源:https://docs.djangoproject.com/en/1.4/topics/logging/

簡單的範例

#-- coding: utf-8 --

import logging

"""logging的簡單使用示例

"""

if __name__ == '__main__':

# 最簡單的用法,不推薦直接用logging模塊

logging.debug(u'這個不會被打印出來')

logging.info(u'這個也不會被打印出來')

logging.warning(u'這個就會了,因爲logging默認的級別是WARNING,低於這個等級的信息就會被忽略')

稍微難一點的範例

#-*- coding: utf-8 -*-

import logging

"""logging的使用示例

"""

if __name__ == '__main__':

        # python官方文檔中提供的一段示例,使用logging模塊產生logger對象

        FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'

        logging.basicConfig(format = FORMAT)

        d = { 'clientip' : '192.168.0.1', 'user' : 'fbloggs' }

        # 創建一個日誌對象

        logger = logging.getLogger('tcpserver')

        logger.warning('Protocol problem: %s', 'connection reset', extra = d)

        # 設置級別

        logger.setLevel(logging.DEBUG)   

        logger.debug('Hello', extra = d)

複雜一點的用法,爲logger添加了若干個handler。

#-*- coding: utf-8 -*-

import logging, logging.config

"""logging的使用示例

"""

if __name__ == '__main__':

        # 比較複雜的用法

        LOGGING = {

                             # 版本,總是1

                             'version': 1,

                             'disable_existing_loggers': True,

                             'formatters': {

                                                            'verbose': {'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'},

                                                             'simple': {'format': '%(levelname)s %(message)s'},

                                                             'default': {

                                                                                     'format' : '%(asctime)s %(message)s',

                                                                                     'datefmt' : '%Y-%m-%d %H:%M:%S'

                                                                }

                                },

                             'handlers': {

                                                        'null': {

                                                                         'level':'DEBUG',

                                                                         'class':'logging.NullHandler',

                                                        },

                                                        'console':{

                                                                             'level':'DEBUG',

                                                                             'class':'logging.StreamHandler',

                                                                             'formatter': 'default'

                                                        },

                                                        'file': {

                                                                         'level': 'INFO',

                                                                         # TimedRotatingFileHandler會將日誌按一定時間間隔寫入文件中,並

                                                                         # 將文件重命名爲'原文件名+時間戮'這樣的形式

                                                                         # Python提供了其它的handler,參考logging.handlers

                                                                         'class': 'logging.handlers.TimedRotatingFileHandler',

                                                                         'formatter': 'default',

                                                                         # 後面這些會以參數的形式傳遞給TimedRotatingFileHandler的

                                                                         # 構造器

                                                                         # filename所在的目錄要確保存在

                                                                         'filename' : 'log',

                                                                         # 每5分鐘刷新一下

                                                                         'when' : 'M',

                                                                         'interval' : 1,

                                                                         'encoding' : 'utf8',

                                                        }

                                },

                             'loggers' : {

                                                        # 定義了一個logger

                                                        'mylogger' : {

                                                                                    'level' : 'DEBUG',

                                                                                    'handlers' : ['console', 'file'],

                                                                                    'propagate' : True

                                                        }

                                } 

        }

        logging.config.dictConfig(LOGGING)

        logger = logging.getLogger('mylogger')

        logger.info('Hello')

另外,還可以通過配置文件來配置logging,方法如下:

配置文件(log_conf):

[loggers]

keys=root,mylogger

[handlers]

keys=null,console,file

[formatters]

keys=verbose,simple,default

[formatter_verbose]

format=%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s

datefmt=

class=logging.Formatter

[formatter_simple]

format=%(levelname)s %(message)s

datefmt=

class=logging.Formatter

[formatter_default]

format=%(asctime)s %(message)s

datefmt=%Y-%m-%d %H:%M:%S

class=logging.Formatter

[logger_mylogger]

level=DEBUG

handlers=console,file

propagate=1

qualname=

[logger_root]

level=NOTSET

handlers=

[handler_null]

class=NullHandler

level=DEBUG

args=()

[handler_console]

class=StreamHandler

level=DEBUG

args=()

[handler_file]

class=handlers.TimedRotatingFileHandler

level=INFO

formatter=default

args=('log','M',1,0,'utf8')

Python代碼:

#-*- coding: utf-8 -*-

import logging, logging.config

"""logging的使用示例

"""

if __name__ == '__main__':

        # 使用配置文件

        logging.config.fileConfig('log_conf')

        logger = logging.getLogger('mylogger')

        logger.info('Hello')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章