Python 学习日知录(二)- 日志

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

Python 学习日知录(二)- 日志

一直在用python进行FPGA网络调试,也就是通过udp包读写FPGA的一些内部寄存器和外设什么的。最近想对这个简单脚本进行改造,打造一个更称手的工具。

暂时想法如下:
1. 记录调试过程(logging);
2. 录制脚本,载入运行脚本(保存成json格式);
3. 打开时恢复上一次的运行环境;
4. 命令行就可以了;

python 2.7内置的logging模块,记录调试过程基本够用。这两天就学习了这个模块的基本用法,总结如下:

1. 基本用法

既然是日志,时间戳必不可少。因此直接上带时间戳的代码:

# -*- coding:utf8 -*-

import logging
import logging.handlers


def ini_logging(log_file_name):
    '''
    初始化logging系统
    :param log_file_name: 日志文件
    :return:
    '''
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)

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


def write_reg(addr, value):  # 写寄存器
    logging.info('write reg %02x : %02x' % (addr, value))


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


if __name__ == '__main__':
    ini_logging('testlog.log')
    logging.info('Start')
    write_reg(100, 16)
    read_reg(100,1)
    logging.info('End')

运行该脚本,获得的日志文件如下:

2017-06-20 23:44:33  INFO - Start
2017-06-20 23:44:33  INFO - write reg 64 : 10
2017-06-20 23:44:33  INFO - read reg 64 addr : 80
2017-06-20 23:44:33  INFO - End

2. 一些有用的东西

2.1 日志等级

日志一共分成5个等级,从低到高分别是:
DEBUG
INFO
WARNING
ERROR
CRITICAL

分别对应五种方法:

    class Logger:
        def debug(self, msg, *args, **kwargs): ...
        def info(self, msg, *args, **kwargs): ...
        def warn(self, msg, *args, **kwargs): ...
        def error(self, msg, *args, **kwargs): ...
        def critical(self, msg, *args, **kwargs): ...

logger.setLevel(logging.DEBUG)中,可以指定打印的最低级别。

2.2 打印格式

fm = logging.Formatter()中设置。格式如下:

"%(asctime)s  %(levelname)s - %(message)s", "%Y-%m-%d %H:%M:%S"

预定义的内容如下:

namecomment
%(name)sName of the logger (logging channel)
%(levelno)sNumeric logging level for the message (DEBUG,INFO, WARN, ERROR, CRITICAL)
%(levelname)sText logging level for the message (“DEBUG”, “INFO”,”WARN”, “ERROR”, “CRITICAL”)
%(pathname)sFull pathname of the source file where the logging call was issued (if available)
%(filename)sFilename portion of pathname
%(module)sModule from which logging call was made
%(lineno)dSource line number where the logging call was issued (if available)
%(created)fTime when the LogRecord was created (time.time() return value)
%(asctime)sTextual time when the LogRecord was created
%(msecs)dMillisecond portion of the creation time
%(relativeCreated)dTime in milliseconds when the LogRecord was created, relative to the time the logging module was loaded (typically at application startup time)
%(thread)dThread ID (if available)
%(message)sThe result of record.getMessage(), computed just as the record is emitted

参考文献:
1. python 日志模块 logging 详解
2. 够用的 Python 写日志的知识——标准日志模块logging简介
3. PEP 282 – A Logging System

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

秋田小鼠

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值