python 运行日志logging代替方案
以下是自己写的 记录日志的代码。(和logging不搭嘎,如果如要学loggging模块,本文末尾有他人的链接。)
# prtlog.py
#############################################
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 12 10:46:06 2018 需求起源:1. 在spyder中写python脚本时,经常要写print来调试; 开发完执行时(python file.py),也需要运行log来找bug.
2. 如果用print, 运行时python file.py >> log 缺点:(1) file.py不结束无法查看log文件 (2)别人模块中的输出,会不断在输出到log.
3. 如果用logging模块 缺点:(1) spyder调试时,log文件一直处于打开状态 (2)在spyder中调试时不好用,logging好像主要为了记录运行时的日志。 功能:
1. 开发时输出print结果,运行时输出同目录下1.log文件
2. 保留最新log中前num行
3. 每次使用prtlog输出都会打开并关闭1.log文件
缺点:效率不高(不追求效率就无所谓了)
""" import os,sys
import time,datetime def checklog(logfile,num=1000):
#保留文件中至少num行
try:
if os.path.exists(logfile):
lines = open(logfile,'r').readlines()
if len(lines)>num+num*0.5: #当文件大于num+500时,只保留最近num行,避免删除重写文件频率太高。
os.remove(logfile)
with open(logfile,'w') as f:
for line in lines[-num:]:
f.write(line)
else:
pass
except:
print('Wrong! : [fun]checklog.') def prtlog(logstr='',linenum='',maxlines=1000):
#linenum 指运行时所在行号
logstr= str(logstr);
dirname, filename = os.path.split(os.path.abspath(sys.argv[0]))
logfile = os.path.join(dirname,'1.log')
checklog(logfile,maxlines)
with open(logfile,'a+') as f:
lineheader='%s %s[%s]: '%(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),filename,linenum)
f.write(lineheader+logstr+'\n')
print(lineheader+logstr)
f.close() if __name__ == '__main__':
prtlog(logstr='') # b.py
############################################# from prtlog import prtlog
prtlog('haha',maxlines=10)
同目录下生成1.log

运行prtlog.py3次,运行b.py3次. 1.log内容:

如需了解logging:
python中logging模块的一些简单用法 ★★★★★★★,
python模块之logging ★★★★
python 运行日志logging代替方案的更多相关文章
- python之 logging 模块(上篇)
一.日志关概念 日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件 ...
- Python之logging模块
一.引言 之前在写一些小程序的时候想把日志内容打到文件中,所以就自己写了一个logger.py的程序,如下: #!/usr/bin/python # -*- coding=utf-8 -*- impo ...
- python模块 ---logging模块
摘要by crazyhacking: 与log4cxx一样,分为三个部分,logger, handler,formatter. 详细内容参考:1官网http://docs.python.org/2/h ...
- python的logging模块
python提供了一个日志处理的模块,那就是logging 导入logging模块使用以下命令: import logging logging模块的用法: 1.简单的将日志打印到屏幕上 import ...
- python 多进程 logging:ConcurrentLogHandler
python 多进程 logging:ConcurrentLogHandler python的logging模块RotatingFileHandler仅仅是线程安全的,如果多进程多线程使用,推荐 Co ...
- python的logging模块之读取yaml配置文件。
python的logging模块是用来记录应用程序的日志的.关于logging模块的介绍,我这里不赘述,请参见其他资料.这里主要讲讲如何来读取yaml配置文件进行定制化的日志输出. python要读取 ...
- Python:logging 的巧妙设计
引言 logging 的基本用法网上很多,这里就不介绍了.在引入正文之前,先来看一个需求: 假设需要将某功能封装成类库供他人使用,如何处理类库中的日志? 数年前在一个 C# 开发的项目中,我用了这样的 ...
- django/python日志logging 的配置以及处理
日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常.在生产环境下有很大的用处.在java 开发中通常用 log4j,logback 等三方组件.那么在 django中是怎么处 ...
- python中logging模块的用法
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
随机推荐
- CENTOS 6.6初始化SHELL脚本
时间:2016-02-24 00:30来源:blog.51cto.com 作者:“xxlixin” 博客 举报 点击:1717次 这个脚本是在刚安装完CENTOS6.6后可能需要进行的操作.在学习CE ...
- java基础基础总结----- 关键字、标识符、注释、常量和变量、运算符、语句、函数、数组(三)
Java语言基础组成:关键字.标识符.注释.常量和变量.运算符.语句.函数.数组 一.标识符 标识符是在程序中自定义的一些名称,由大小写字母[a-zA-Z],数字[0-9],下划线[ _ ],特殊字符 ...
- GBDT
一.决策树分类 决策树分为两大类,分类树和回归树 分类树用于分类标签值,如晴天/阴天/雾/雨.用户性别.网页是否是垃圾页面 回归树用于预测实数值,如明天的温度.用户的年龄 两者的区别: 分类树的结果不 ...
- nGrinder TestRunnerInsertMysqlMore.groovy
s C:\Users\Lindows\workspace\GroovyTest\src\com\iteye\lindows\mysql\TestRunnerInsertMysqlMore.groovy ...
- shell脚本递归压缩实践
#!/bin/bash Src_Path=/data/www/logs Dst_Path=/data/www/logs_bak for rfile in `find $Src_Path/ -depth ...
- Hive记录-Hive常用命令操作
1.hive支持四种数据模型 • external table ---外部表:Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处,这样的好处是如果你要删除这个外部表,该 ...
- Java POI 读取word文件
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 1.读取word 2003及word 2007需要 ...
- Tomcat服务启动成功,但访问index.jsp出错 (jspInit)【转】
本文引用自 --> http://zhouhaitao.iteye.com/blog/1164736 Tomcat服务启动成功,但访问index.jsp出错 环境:Tomcat6 + jdk6 ...
- UESTC - 1324 卿学姐与公主
题目链接 某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏 在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中. 英勇的卿学姐拔出利刃冲向了拯救公主的道路. 走过了荒野,翻越了 ...
- 微信接口开发之高级篇系列【微信权限封装类WechatAuth】
ThinkPHP框架目录结构: <?php /** * Created by PhpStorm. * User: Tinywan * Date: 2016/9/11 * Time: 9:55 * ...