Python 学习日知录(三)- 创建多个Logger

python 专栏收录该内容
10 篇文章 0 订阅

Python 学习日知录(三)- 创建多个Logger

1. Logger说明

关于logging模块中的几个重要的类,python官方文档做了很好的说明:

Loggers expose the interface that application code directly uses.

Handlers send the log records (created by loggers) to the appropriate destination.

Filters provide a finer grained facility for determining which log records to output.

Formatters specify the layout of log records in the final output.

Logger类提供了程序使用的接口。通过调用logging.getLogger('logger_name') 方法,可以创建一个日志接口,定义自己的输出方式和格式,并且在任何地方都可以使用。其中 logger_name 为该Logger通道的唯一标识,通过其可以在任何模块中使用该通道。

2. 代码示例

利用上篇博文,改造了一段代码:

-*- coding:utf8 -*-

import logging
import logging.handlers


def ini_file_logging(log_file_name):  #创建文件Logger
    logger = logging.getLogger('fileLog')
    logger.setLevel(logging.DEBUG)

    rh = logging.handlers.TimedRotatingFileHandler(log_file_name, 'D')
    fm = logging.Formatter("%(name)s %(asctime)s  %(levelname)s - %(message)s", "%Y-%m-%d %H:%M:%S")
    rh.setFormatter(fm)
    logger.addHandler(rh)


def ini_console_logging():  # 创建直接输出到stderr的Logger
    logger = logging.getLogger('consoleLog')
    logger.setLevel(logging.DEBUG)

    rh = logging.StreamHandler()
    fm = logging.Formatter("%(name)s %(asctime)s  %(levelname)s - %(message)s", "%Y-%m-%d %H:%M:%S")
    rh.setFormatter(fm)
    logger.addHandler(rh)


def write_reg(addr, value):  # 写寄存器
    my_logger = logging.getLogger('fileLog')  # log写到文件里
    my_logger.info('write reg %02x : %02x' % (addr, value))


def read_reg(addr, len):  # 读寄存器
    my_logger = logging.getLogger('fileLog')  # log写到文件里
    ret = 128  # 假设的返回值,实际从网络获取
    my_logger.info('read reg %02x : %02x' % (addr, ret))


if __name__ == '__main__':

    ini_file_logging('testlog.log')
    ini_console_logging()

    logger = logging.getLogger('consoleLog')
    logger.info('Start')

    write_reg(100, 16)
    read_reg(100, 1)

    logger = logging.getLogger('consoleLog')
    logger.info('End')

该示例程序创建了两个Logger,一个将日志保存在文件中( fileLog ),另一个打印在控制台上( consoleLog )。在任何地方,通过 logging.getLogger('fileLog') 可获取fileLog 的句柄,并使用。consoleLog 也可用同样的方式使用。

该程序的输出如下:

===========控制台输出=============================
consoleLog 2017-06-23 00:04:01  INFO - Start
consoleLog 2017-06-23 00:04:01  INFO - End


===========文件输出==============================
fileLog 2017-06-23 00:04:01  INFO - write reg 64 : 10
fileLog 2017-06-23 00:04:01  INFO - read reg 64 : 80

参考文献:
1. logging — Logging facility for Python

  • 1
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值