python logging

每个 Python 程序员都要知道的日志实践

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
'''
CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET

如果这里设置为logger.setLevel(logging.ERROR)
那么下面代码中输出的info.log和warn.log都是空的
'''



# create a file handler
handler_info = logging.FileHandler('info.log')
handler_info.setLevel(logging.INFO)
# create a logging format
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler_info.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(handler_info)


# create a file handler
handler_warn = logging.FileHandler('warn.log')
handler_warn.setLevel(logging.WARNING)
# create a logging format
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler_warn.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(handler_warn)



logger.info('info baby')
logger.warning('warning baby')

'''
CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET

results:
warn.log:
2018-05-10 10:25:12,148 - __main__ - WARNING - warning baby


info.log:
2018-05-10 10:25:12,148 - __main__ - INFO - info baby
2018-05-10 10:25:12,148 - __main__ - WARNING - warning baby

'''

http://nodeca.github.io/js-yaml/

这是一个yaml转换为json的在线demo

version: 1
disable_existing_loggers: False
formatters:
    simple:
        format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
handlers:
    console:
        class: logging.StreamHandler
        level: DEBUG
        formatter: simple
        stream: ext://sys.stdout
    info_file_handler:
        class: logging.handlers.RotatingFileHandler
        level: INFO
        formatter: simple
        filename: info.log
        maxBytes: 10485760 # 10MB
        backupCount: 20
        encoding: utf8
    error_file_handler:
        class: logging.handlers.RotatingFileHandler
        level: ERROR
        formatter: simple
        filename: errors.log
        maxBytes: 10485760 # 10MB
        backupCount: 20
        encoding: utf8
loggers:
    my_module:
        level: ERROR
        handlers: [console]
        propagate: no
root:
    level: INFO
    handlers: [console, info_file_handler, error_file_handler]

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import logging
import os
import logging.config
import yaml


def setup_logging(
        default_path='logging.yaml',
        default_level=logging.INFO,
        env_key='LOG_CFG'):
    """Setup logging configuration
    """
    path = default_path
    value = os.getenv(env_key, None)
    if value:
        path = value
    if os.path.exists(path):
        with open(path, 'rt') as f:
            config = yaml.load(f.read())
        logging.config.dictConfig(config)
    else:
        logging.basicConfig(level=default_level)


setup_logging(default_path="logging.yaml")

logger = logging.getLogger("deepwalk")

logger.warning("I love you")

简单的将日志打印到屏幕

import logging

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

屏幕上打印:
WARNING:root:This is warning message

默认情况下,logging将日志打印到屏幕,日志级别为WARNING;
日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。

通过logging.basicConfig函数对日志的输出格式及方式做相关配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值