美文网首页
Python logging

Python logging

作者: 王鑫鑫_d516 | 来源:发表于2017-09-22 08:09 被阅读0次

Python logging

简单使用

By three learning case, familiar with Python logging

Case1

#!/usr/local/bin/python
# -*- coding:utf-8 -*-
import logging

logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')

Case2

#!/usr/local/bin/python
# -*- coding:utf-8 -*-
import logging

# 通过下面的方式进行简单配置输出方式与日志级别
logging.basicConfig(filename='logger.log', level=logging.DEBUG)

logging.debug('debug message')
logging.info('info message')
logging.warn('warn message')
logging.error('error message')
logging.critical('critical message')

Case3

[loggers]
keys=root,example01

[handlers]
keys=hand01,hand02

[formatters]
keys=simple,detail

[logger_root]
level=NOTSET
handlers=hand01,hand02

[logger_example01]
handlers=hand01,hand02
qualname=example01
propagate=0

[handler_hand01]
class=StreamHandler
level=INFO
formatter=simple
args=(sys.stderr,)

[handler_hand02]
class=FileHandler
level=DEBUG
formatter=detail
args=('log.log', 'a')

[formatter_detail]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s

[formatter_simple]
format=%(name)s - %(levelname)s - %(message)s
# -*- encoding:utf-8 -*-
import logging

# create logger
logger_name = "example"
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)

# create file handler
log_path = "./log.log"
fh = logging.FileHandler(log_path)
fh.setLevel(logging.WARN)

# create formatter
fmt = "%(asctime)-15s %(levelname)s %(filename)s %(lineno)d %(process)d %(message)s"
datefmt = "%a %d %b %Y %H:%M:%S"
formatter = logging.Formatter(fmt, datefmt)

# add handler and formatter to logger
fh.setFormatter(formatter)
logger.addHandler(fh)

# print log info
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

重要的概念

Logger 记录器,暴露了应用程序代码能直接使用的接口。
Handler 处理器,将(记录器产生的)日志记录发送至合适的目的地。
Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。
Formatter 格式化器,指明了最终输出中日志记录的布局。

template for complex system

  • INPUT: log.py, log_test.py, init.py(nothing in this file)
  • OUTPUT:
    • file: logs/tapnews.log
    • terminal: run by self

log.py

# coding:utf-8
'''
Logging module for Tap News
'''

import os
import logging
import logging.config as log_conf

LOG_DIR = os.path.dirname(os.path.dirname(__file__))+'/logs'
if not os.path.exists(LOG_DIR):
    os.mkdir(LOG_DIR)

LOG_PATH = os.path.join(LOG_DIR, 'tapnews.log')

LOG_CONFIG = {
    'version': 1.0,
    'formatters': {
        'simple': {
            'format': '%(name)s - %(levelname)s - %(message)s',
        },
        'detail': {
            'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
            'datefmt': "%Y-%m-%d %H:%M:%S"
        },
        'optional': {
            'format': '%(filename)s %(lineno)d - %(levelname)s - %(message)s',
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'level': 'INFO',
            'formatter': 'optional'
        },
        'file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'maxBytes': 1024 * 1024 * 5,
            'backupCount': 10,
            'filename': LOG_PATH,
            'level': 'INFO',
            'formatter': 'detail',
            'encoding': 'utf-8',
        },
    },
    'loggers': {
        'news_monitor': {
            'handlers': ['console', 'file'],
            'level': 'DEBUG',
        },
        'news_fetcher': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
        },
        'other': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
        },
        'news_deduper': {
            'handlers': ['console', 'file'],
            'level': 'INFO',
        }
    }
}

log_conf.dictConfig(LOG_CONFIG)

LOGGING_NEWS_MONITOR = logging.getLogger('news_monitor')
LOGGING_NEWS_FETCHER = logging.getLogger('news_fetcher')
LOGGING_NEWS_DEDUPER = logging.getLogger('news_deduper')
LOGGING_OHTER = logging.getLogger('other')

__all__ = ['LOGGING_NEWS_MONITOR', 'LOGGING_NEWS_FETCHER', 'LOGGING_NEWS_DEDUPER', 'LOGGING_OHTER']

log_test.py

'''
test LOGGING module
'''
# import common package in parent directory
# sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'logger'))

# from log import parser, crawler, storage
from log import LOGGING_NEWS_MONITOR, LOGGING_NEWS_FETCHER
from log import LOGGING_NEWS_DEDUPER, LOGGING_OHTER

LOGGING_NEWS_MONITOR.info('This is crawler')

LOGGING_NEWS_FETCHER.info('This is info')

LOGGING_NEWS_DEDUPER.info('tihs is error')

LOGGING_OHTER.info('tihs is error')

Ref:

Author: Python 2.7 Doc
Link: https://docs.python.org/2.7/library/logging.config.html#logging.config.fileConfig

Author:好吃的野菜
Link:http://www.jianshu.com/p/feb86c06c4f4

Author:rookiefly
Link:https://github.com/ResolveWang/weibospider/blob/master/logger/log.py

相关文章

网友评论

      本文标题:Python logging

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