Python实现日志文件写入或者打印--类似于Java的Log4j
开发过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的更多相关文章
- python处理日志文件
python处理日志文件 1 打开日志文件 虽然,日志文件的后缀为.log,但是基本上与文本文件没有区别,按照一般读取文本文件的方式打开即可: fp =open("e:\\data.log& ...
- 日志文件写入失败(permission denied)
用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案. 在讲这个问题之前可能需要简单介绍下Linu ...
- Python学习笔记——文件写入和读取
1.文件写入 #coding:utf-8 #!/usr/bin/env python 'makeTextPyhton.py -- create text file' import os ls = os ...
- 扔掉log4j、log4j2,自己动手实现一个多功能日志记录框架,包含文件,数据库日志写入,实测5W+/秒日志文件写入,2W+/秒数据库日志写入,虽然它现在还没有logback那么强大
讲到log4j,现在国外基本是没有开发者用这个框架了,原因大致有几点,1.功能太少:2.效率低下:3.线程锁bug等等等各种莫名其妙的bug一直都没解决. 其实最重要的是log4j的作者自己也放弃了l ...
- python笔记20-yaml文件写入(ruamel.yaml)
前言 yaml作为配置文件是非常友好的一种格式,前面一篇讲了yaml的一些基础语法和读取方法,本篇继续讲yaml文件写入方法 用yaml模块写入字典嵌套字典这种复杂的数据,会出现大括号{ },不是真正 ...
- 【python】确保文件写入结束
今天遇到了个问题: 我在执行如下代码时发现,文件只写了一半.也就是说,当文件量过大时,下面的代码是不能保证文件被正确写入的. fd = open('test.txt','w') fd.write(&q ...
- 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 ...
- logstash 抓取IIS日志文件写入Elasticsearch
如果需要对IIS日志进行分析可以使用logstash从文件中抓取出来进行分析: 输入部分: input { file { type => "iis_log_monitor" ...
- python关于window文件写入后,换行默认\r\n的问题
因为python兼容各种平台,所以当在window打开文本文件写入后,换行会默认写成\r\n linux是\n 如果想去掉换行的\r 解决方法:在open函数里写入换行要求即可 with open(f ...
随机推荐
- 某CTF平台一道PHP代码注入
这道题以前做过但是没有好好的总结下来.今天又做了一下,于是特地记录于此. 首先就是针对源码进行审计: 关于create_function这个函数可以看一下这个:http://www.php.cn/ph ...
- asp.net mvc select用法
var statusSelectItems = new List<SelectListItem> { "}, "}, "}, "}, "} ...
- SpringBoot系列教程web篇之过滤器Filter使用指南扩展篇
前面一篇博文介绍了在 SpringBoot 中使用 Filter 的两种使用方式,这里介绍另外一种直接将 Filter 当做 Spring 的 Bean 来使用的方式,并且在这种使用方式下,Filte ...
- Oracle数据库提权(低权限提升至dba)
0x01 Oracle存储过程”缺陷” 在 Oracle 的存储过程中,有一个有趣的特点:运行权限.运行权限分为两种,definer 和 invoker. definer 为函数创建者的权限,而 in ...
- 关于参加AWD攻防比赛心得体会
今天只是简单写下心得和体会 平时工作很忙 留给学习的时间更加珍少宝贵. 重点说下第二天的攻防比赛吧 . 三波web题 .涉及jsp,php,py. 前期我们打的很猛.第一波jsp的题看到有首页预留后 ...
- msf各种弱口令爆破
Msf: 写的很乱 记录下msf各个爆破弱口令的模块 run post/windows/gather/arp_scanner RHOSTS=10.10.10.0/24 使用arp_scanner模块 ...
- [Luogu3659][USACO17FEB]Why Did the Cow Cross the Road I G
题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's farm simply has a lot of ...
- [HDU5001]Walk
Problem Description I used to think I could be anything, but now I know that I couldn't do anything. ...
- CentOS6.5下搭建FTP服务
一.FTP协议 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.其中FT ...
- 去除img下方的空白(vertical-align:middle)——原理
代码如下:一个简单的div装在一个img中, 然而在预览时却发现这种情况 也就是说img下方会无缘无故出现一个空隙.然后你发现,只要给img元素加上一个属性 vertical-align:middle ...