开发过Java的应该都知道Log4j的重要性,尤其是在开发测试中,能够让开发和测试人员方便找的bug,Python也有和Log4j相同功能的库那就是logging库,其功能非常强大,在开发测试中很方便,我是将其作为工具使用的,代码syslog.py如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/11/27 15:39
# @Desc : 系统日志,主要用来打印测试
# @File : syslog.py
# @Software: PyCharm from lxml import etree
import logging.handlers
import logging
import os
import sys # 提供日志功能
class syslogger:
# 先读取XML文件中的配置数据
# 由于config.xml放置在与当前文件相同的目录下,因此通过 __file__ 来获取XML文件的目录,然后再拼接成绝对路径
# 这里利用了lxml库来解析XML
root = etree.parse(os.path.join(os.path.dirname(__file__), '../LogConfig.xml')).getroot()
# 读取日志文件保存路径
logpath = root.find('logpath').text
# 读取日志文件容量,转换为字节
logsize = 1024*1024*int(root.find('logsize').text)
# 读取日志文件保存个数
lognum = int(root.find('lognum').text) # 日志文件名:由用例脚本的名称,结合日志保存路径,得到日志文件的绝对路径
logname = os.path.join(logpath, sys.argv[0].split('/')[-1].split('.')[0]) # 初始化logger
log = logging.getLogger()
# 日志格式,可以根据需要设置
fmt = logging.Formatter('[%(asctime)s][%(filename)s][line:%(lineno)d][%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S') # 日志输出到文件,这里用到了上面获取的日志名称,大小,保存个数
handle1 = logging.handlers.RotatingFileHandler(logname, maxBytes=logsize, backupCount=lognum)
handle1.setFormatter(fmt)
# 同时输出到屏幕,便于实施观察
handle2 = logging.StreamHandler(stream=sys.stdout)
handle2.setFormatter(fmt)
log.addHandler(handle1)
log.addHandler(handle2) # 设置日志基本,这里设置为INFO,表示只有INFO级别及以上的会打印
log.setLevel(logging.INFO) # 日志接口,用户只需调用这里的接口即可,这里只定位了INFO, WARNING, ERROR三个级别的日志,可根据需要定义更多接口
@classmethod
def info(cls, msg):
cls.log.info(msg)
return @classmethod
def warning(cls, msg):
cls.log.warning(msg)
return @classmethod
def error(cls, msg):
cls.log.error(msg)
return
syslogger=syslogger()

其配置文件LogConfig.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!--系统日志配置文件-->
<config> <!-- 日志保存路径 -->
<logpath>/home/</logpath> <!-- 每个脚本对应的日志文件大小,单位MB -->
<logsize>100</logsize> <!-- 每个脚本保存的日志文件个数 -->
<lognum>3</lognum>
</config>

若无Python logging库,安装命令pip install logging

Python实现日志文件写入或者打印--类似于Java的Log4j的更多相关文章

  1. python处理日志文件

    python处理日志文件 1 打开日志文件 虽然,日志文件的后缀为.log,但是基本上与文本文件没有区别,按照一般读取文本文件的方式打开即可: fp =open("e:\\data.log& ...

  2. 日志文件写入失败(permission denied)

    用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案. 在讲这个问题之前可能需要简单介绍下Linu ...

  3. Python学习笔记——文件写入和读取

    1.文件写入 #coding:utf-8 #!/usr/bin/env python 'makeTextPyhton.py -- create text file' import os ls = os ...

  4. 扔掉log4j、log4j2,自己动手实现一个多功能日志记录框架,包含文件,数据库日志写入,实测5W+/秒日志文件写入,2W+/秒数据库日志写入,虽然它现在还没有logback那么强大

    讲到log4j,现在国外基本是没有开发者用这个框架了,原因大致有几点,1.功能太少:2.效率低下:3.线程锁bug等等等各种莫名其妙的bug一直都没解决. 其实最重要的是log4j的作者自己也放弃了l ...

  5. python笔记20-yaml文件写入(ruamel.yaml)

    前言 yaml作为配置文件是非常友好的一种格式,前面一篇讲了yaml的一些基础语法和读取方法,本篇继续讲yaml文件写入方法 用yaml模块写入字典嵌套字典这种复杂的数据,会出现大括号{ },不是真正 ...

  6. 【python】确保文件写入结束

    今天遇到了个问题: 我在执行如下代码时发现,文件只写了一半.也就是说,当文件量过大时,下面的代码是不能保证文件被正确写入的. fd = open('test.txt','w') fd.write(&q ...

  7. python之创建文件写入内容

    https://www.cnblogs.com/evablogs/p/7096686.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...

  8. logstash 抓取IIS日志文件写入Elasticsearch

    如果需要对IIS日志进行分析可以使用logstash从文件中抓取出来进行分析: 输入部分: input { file { type => "iis_log_monitor" ...

  9. python关于window文件写入后,换行默认\r\n的问题

    因为python兼容各种平台,所以当在window打开文本文件写入后,换行会默认写成\r\n linux是\n 如果想去掉换行的\r 解决方法:在open函数里写入换行要求即可 with open(f ...

随机推荐

  1. liunx下安装MySQL

    1.安装依赖包:yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bisonyum install -y perl-Module-Insta ...

  2. C++学习笔记-预备知识

    1.1 C++简介 C++融合3种不同的编程方式:C语言代表的过程性语言.C++在C语言基础上添加的类代表的面向对象语言.C++模板支持的广泛编程. 1.2 C++简史 1.2.1 C语言 Ritch ...

  3. vue3.0 vue.config.js 配置实战

    今天讲述一下vue-config.js配置,我们前面搭建好脚手架会发现,这个对比2.x版本少了很多东西,没有build的配置,也没有webpack的配置,那么问题来了,我们如何去开发我们的项目呢,比如 ...

  4. PHP 实现get 和 Post 请求

    1 get get请求比较简单,file_get_contents():即可实现 $tmpUrl = "http://测试url"; # get方法获取信息 $rawGetData ...

  5. fiddler抓包-快速找到准确的接口与断点介绍

    前言: 相信有不少小伙伴提出,如果一堆杂七杂八的接口在fiddler显示,眼花缭乱的该怎么办?本篇文章小编给大家带来的内容是: 1.fiddler中设置域名过滤,使得快速定位你需要的接口: 2.断点, ...

  6. Linux系统基础

    Linux系统基础 目录   简介 0x01 Linux文件与目录管理 0x02 Linux系统用户以及用户组管理 0x03文档的压缩与打包 0x04 apt安装软件 0x05 进程管理 标签 Lin ...

  7. HMLT clear 属性

    原文 : http://www.zhangxinxu.com/wordpress/2014/06/understand-css-clear-left-right-and-use/ clear 的四个值 ...

  8. RequireJS 插件

    网址:http://www.requirejs.cn/docs/api.html#i18n RequireJS的插件: Text:自动加载一些非js的文本文件. domReady:确保在Dom Rea ...

  9. boost::thread_specific_ptr

    thread_specific_ptr代表了一个全局的变量,而在每个线程中都各自new一个线程本地的对象交给它进行管理. 线程之间就不会因为访问同一全局对象而引起资源竞争导致性能下降. 而线程结束时, ...

  10. gperftools::TCMalloc

    VS2013编译gperftools-2.4 1)https://github.com/gperftools/gperftools  下载   gperftools-2.4.zip  版本.2)解压  ...