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 ...
随机推荐
- 原生js操作option
<script type="text/javascript"> // 1.动态创建select function createSelect() { var mySele ...
- Adobe Premiere Pro CC ------ 快捷键
ctrl + ~:全屏 Esc:退出全屏
- 个股与指数的回归分析(自带python ols 参数解读)
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...
- 数据库入门理论知识介绍以及编译安装MySql
数据库入门理论知识介绍以及编译安装MySql 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1&g ...
- 系统自带的日志管理工具-rsyslogd
系统自带的日志管理工具-rsyslogd 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志管理简介 1.什么是日志 系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以 ...
- nginx-1.12.1编译参数详情
一下nginx-1.12.1编译参数详情 #/usr/local/nginx/sbin/nginx -V nginx version: nginx/1.12.1 built by gcc 4.4.7 ...
- 单例设计模式Singleton之懒加载模式(懒汉模式)【原】
单例设计模式Singleton之懒加载模式(懒汉模式) SingletonLazy.java类 package kingtool; import kingtool.http.IPTool; publi ...
- CentOS6.8下Jenkins+maven+tomcat+git+shell自动构建、部署web应用环境的搭建
参考资料:http://www.cnblogs.com/cheng95/p/6542036.html http://www.cnblogs.com/software-test/p/7068278.ht ...
- .Net进阶系列(4)-Lambda和linq入门(被替换)
一. Lambda和linq入门 lambda表达式又叫点标记,linq表达式又叫查询表达式,下面有三个简单的案例说明一下二者的基本用法,详细用法会在后续章节中更新. 二. 事例 1. 准备学生信息. ...
- Socket 连接建立过程
阻塞模式下: 1,客户端向服务器端发起请求建立连接时,服务器端只需要运行到 serverSocket = ); 客户端注册的 SelectionKey.OP_CONNECT 事件就能够发生. 也就是 ...