最近在做自动化测试时,想给他加上日志,所以用到logging的模块,以下是python增加log的几种方式
一、python代码配置方式(当然还有一种是可以多模块通用的一个python代码设置,这个网上有很多例子,就不在这里赘述了)

import logging
import logging.handlers

#LOG_FILE 是要输出的日志的文件地址
LOG_FILE=r"C:\Users\min.sun\Desktop\自动化测试\log.txt"
handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024, backupCount = 5)
fmt = "%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s"
formatter = logging.Formatter(fmt)
handler.setFormatter(formatter)
logger = logging.getLogger('tst')
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.info('first info message')
logger.debug('first debug message')
try:
    1/0
except Exception as e:
    logger.debug(e)
    print(e)

 
说明:log里可以包含变量,用法如下,是将name变量中的内容替换到%s上。不仅是info,其他级别的也是这么用
logger.info("这是一个变量 %s ",name)

 
二、使用配置文件
使用配置文件可以更灵活,更方便,下面是配置文件的一些使用方法
 
配置文件:
[loggers]
keys=root,example01,example02,performtest [logger_root]
level=DEBUG
handlers=hand01,hand02 [logger_example01]
handlers=hand03
qualname=example01
propagate=0 [logger_example02]
handlers=hand01,hand03
qualname=example02
propagate=0 [logger_performtest]
handlers=hand03
qualname=performtest
propagate=0
###############################################
[formatters]
keys=form01,form02 [formatter_form01]
format=%(asctime)s - [%(filename)s:%(lineno)s] - %(levelname)s - %(message)s
datefmt= [formatter_form02]
format=%(name)-12s: %(levelname)-8s %(message)s
datefmt=%a, %d %b %Y %H:%M:%S ############################################### [handlers]
keys=hand01,hand02,hand03 [handler_hand01]
class=StreamHandler
level=INFO
formatter=form02
args=(sys.stderr,) [handler_hand02]
class=FileHandler
level=DEBUG
formatter=form01
#要存储log的文件地址
args=(r"C:\Users\min.sun\Desktop\testlog.txt", 'a') [handler_hand03]
class=handlers.RotatingFileHandler
level=INFO
formatter=form01
args=(r"C:\Users\min.sun\Desktop\testlog.txt", 'a',10*1024*1024, 5)
(说明:重点注意一下handler中的class,logging提供了多种Handler,不同的代表了不同的日志存储方式,具体内容可以见我下图给出的参考)
 
模块中调用的方法:
import logging
import logging.config
logging.config.fileConfig(r"C:\Users\min.sun\Desktop\autotest\com\log.conf")
logger = logging.getLogger("example01") logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message"


说明:在用logging的过程中遇到了编码的问题,一个是配置文件中的存储log的文件路径中包含中文,但是执行时提示GBK的不能读取;一个是存储的log包含中文,结果存储到日志文件中后乱码。
解决方法:将log文件更改编码为UTF8无BOM格式编码。配置文件也更改为这个格式或者GBK格式。

参考文章:http://www.cnblogs.com/dkblog/archive/2011/08/26/2155018.html

Python的logging,记录log的包的更多相关文章

  1. 【python】logging记录traceback

    import logging try: do-something-block except: logging.exception("Exception Logged")

  2. Python的日志记录-logging模块的使用

    一.日志 1.1什么是日志 日志是跟踪软件运行时所发生的事件的一种方法,软件开发者在代码中调用日志函数,表明发生了特定的事件,事件由描述性消息描述,同时还包含事件的重要性,重要性也称为级别或严重性. ...

  3. [ Python入门教程 ] Python中日志记录模块logging使用实例

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

  4. python 中 logging 模块的 log 函数以及坑

    记录下吧,一个日志的函数,但有个坑是在调用函数时需要先将函数实例化为一个变量,否则进入某个循环时会多次刷新日志: """ 日志模块 """ ...

  5. day27 python学习 logging

    logging模块 函数式简单配置 import logging logging.debug('debug message') logging.info('info message') logging ...

  6. Python之logging模块

    一.引言 之前在写一些小程序的时候想把日志内容打到文件中,所以就自己写了一个logger.py的程序,如下: #!/usr/bin/python # -*- coding=utf-8 -*- impo ...

  7. python模块 ---logging模块

    摘要by crazyhacking: 与log4cxx一样,分为三个部分,logger, handler,formatter. 详细内容参考:1官网http://docs.python.org/2/h ...

  8. python的logging模块之读取yaml配置文件。

    python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...

  9. django/python日志logging 的配置以及处理

    日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常.在生产环境下有很大的用处.在java 开发中通常用 log4j,logback 等三方组件.那么在 django中是怎么处 ...

随机推荐

  1. monkey亲测

    打开终端: adb devices  查看链接的设备 adb shell 进入手机系统 ls data/data 进入手机目录查看要执行目标app的包名 adb -s emulator-(机器名) s ...

  2. MySQL Binlog三种格式介绍及分析

    Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在binlog中. 优点:不需要记录每一行的变化,减 ...

  3. override的实现原理

    转载 http://blog.csdn.net/fan2012huan/article/details/51007517 基于基类的调用和基于接口的调用,从性能上来讲,基于基类的调用性能更高 .因为i ...

  4. [UE4]C++创建对象的三种方式

    #include <iostream> using namespace std; class A { private: int n; public: A(int m):n(m) { } ~ ...

  5. ffmpeg 播放音频

    播放音频,设置好SDL_AudioSpec播放参数,然后由SDL回调函数进行解码和数据的拷贝,解码播放音频无需设置延迟,因为声卡播放音频是阻塞的 int audio_decode_frame(AVCo ...

  6. express基础

    express框架 const express = require("express"); 引入express框架 var app= express(); 实例化   相当于构造函 ...

  7. AJAX相关总结

    AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 J ...

  8. Fork-Join分治编程介绍(一)

    一.Fork-Join 框架介绍 1. 什么是 Fork-Join 分治编程框架   Fork/Join框架是Java7提供了的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每 ...

  9. Centos LVM 创建 删除 扩大 缩小

    新建LVM的过程1.使用fdisk 新建分区 修改ID为8e3.使用 pvcreate 创建 PV 4.使用 vgcreate 创建 VG 5.使用 lvcreate 创建 LV 6.格式化LV7.挂 ...

  10. xe7 控件升级

    rm.ehlib.synedit OK SynSQLSyn1->TableNames 为NULL,导致添加数据失败,XE6正常 放在按钮里也不正常,就不说初始化次序引起的.