平时写的一些小程序时,需要日志来记录程序运行的情况,但是python标准库 logging 配置起来比较麻烦,所以自己写个函数实现日志功能。

废话不多说,先上代码:

# encoding:utf-8from sys import exc_info, _getframe
import time
from traceback import TracebackExceptiondef logger(message: str, level='ERROR'):"""当调用logger时,直接给参数字符串时,会写入文件 log当给定 level='ERROR' 参数时,另外还会写入异常产生的轨迹,没有则为 None,建议在 except 中使用:param message:可传入异常信息:param level::return:"""try:if isinstance(message, str):time_now = time.strftime('%Y-%m-%d %H:%M:%S')year_month = time.strftime('%Y-%m')log_name = 'log' + year_month + '.txt'with open(log_name, 'a', encoding='utf-8') as temp:file_path, func_name, line_no = find_caller()  # 报告日志打印位置file_name = str(file_path).split('\\')[-1]format_message = "{time} |  {level}  | {file_name}:{func_name}:{line_no} - {message}\n".format(time=time_now, level=level, file_name=file_name,func_name=func_name, line_no=line_no, message=message)tbe = trace_information()if level == 'ERROR':print(format_message, ''.join(tbe.format()), file=temp)print(format_message, ''.join(tbe.format()))else:print(format_message, file=temp)print(format_message)except Exception as e:logger('日志发生异常:' + str(e))def find_caller():"""Find the stack frame of the caller so that we can note the sourcefile name, line number and function name.抛出一个异常,通过向上查找的方式,找到调用者的信息# f = sys._getframe(1).f_back:returns 返回调用者所在的文件名,模块名,行号"""try:raise SystemErrorexcept SystemError:# f = exc_info()[2].tb_frame.f_backf = _getframe(1).f_backreturn f.f_code.co_filename, f.f_code.co_name, f.f_linenodef trace_information():"""获取异常时的栈轨迹:return:"""exc_type, exc_value, exc_tb = exc_info()tbe = TracebackException(exc_type, exc_value, exc_tb,)return tbe

其中的函数 find_caller 和 trace_information 是从 logging 源代码中摘抄出来的,用于获取调用者的位置 以及 发生异常时 的异常轨迹。

输出在日志文件和控制台的结果如下图,可以根据实际情况增加或修改功能。

python3:从 logging 库中摘‘零件’另造小轮子 简单日志功能相关推荐

  1. 如何从关键词库中选出核心关键词的小技巧

    摘要:通过对关键词的研究,我们找到了大量的关键词,建立了网站的关键词库,因为关键词数量众多,而首页所能容纳的关键词数量有限,我们就要对关键词库里的关键词进行合理的布局,首页主做难度很大.搜索次数很多的 ...

  2. win7计算机的库如何更改储存位置,Win7如何往库中添加文件夹?小编教你操作

    大家都知道,在win7系统中,有一个特殊文件夹,叫做库,想要新建库,就需要在新建的库中添加一些文件夹路径,以实现同时打开多个不同磁盘上的文件.那么具体该怎么怎么操作呢?下面小编就给大家分享一下win7 ...

  3. 【超简单!】如何在ZINC库中批量下载虚拟筛选小分子数据集 (Windows环境下)

    文章目录 前言 一.选择合适的分子范围 二.数据集下载 三.Windows安装Wget 四.准备就绪,傻瓜式下载分子集! 总结 前言 使用Windows环境,在进行分子对接或者人工智能分子筛选时需要从 ...

  4. ACE库中ACE_Msg_Log日志对象浅论

    引言 ACE库提供了ACE_Msg_Log类实现较为全面的日志功能.对于该类的基本使用已经有不少文章谈论过.本文对其中几点需要注意的地方进行说明,帮助大家更好地使用该类. 1. 线程安全性       ...

  5. eplan接触器主触点怎么成一组_EPLAN 符号库中为何没有接触器的三相主触点

    EPLAN 符号库中为何没有接触器的三相主触点 EPLAN 符号库中为何没有接触器的三相主触点大家会发现在EPLAN 的符号库中没有接触器的三相主触点以下简称三相主触点符号,这不是疏漏,也不是偷懒做一 ...

  6. ibm ilog mysql_开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)...

    开源纯C日志函数库iLOG3快速入门(八.如果你喜欢简单日志函数甚于日志函数库) 很多网友来信坚持表达了在项目中应使用简单日志函数,而不喜欢日志函数库,我与之反复争论无果,不过话说回来,我也喜欢短小轻 ...

  7. oracle urlencode 中文,Python2和Python3中urllib库中urlencode的使用注意事项

    前言 在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包 ...

  8. python3 urlencode_Python2和Python3中urllib库中urlencode的使用注意事项

    前言 在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包 ...

  9. python中logging库使用总结

    logging库基础使用 前言:logging库是Python的日志管理软件,类似print但是比它更加强大,python自带的库. logging库的日志级别 DEBUG:详细信息,调试信息. IN ...

  10. Python标准库中的logging模块

          1.将日志输出到屏幕 import  logging logging.debug('This  is  debug  message') logging.info('This  is  ...

最新文章

  1. java连连看源代码在哪_连连看java源代码
  2. mysql修行练级之字符集,数据类型与存储引擎选择
  3. .NET完全手动搭建三层B/S架构
  4. html5+css3网页设计与网站布局从新手到高手,HTML5+CSS3网页设计与网站布局从新手到高手...
  5. JVM垃圾回收机制总结(5) :JDK垃圾收集器的配置命令
  6. 简化得最没道理的6个汉字,让人大跌眼镜
  7. 太原理工大学c语言课程设计报告,[太原理工大学C语言实验报告.doc
  8. microsoft账号登陆一直在加载_英雄联盟手游下载,附带拳头账号注册教程
  9. toolstripmanager --工具栏或菜单的合并
  10. java多线程通信_Java多线程-线程通信
  11. 2022年 1月 windows 新型勒索病毒 360Crypt将全部文件后缀改为.360 2022年最新传播勒索病毒
  12. 通过简单案例,理解观察者模式
  13. 分享几个简单的HTML网页特效代码
  14. Spring Cloud Gateway 没有链路信息,我 TM 人傻了(下)
  15. 蓝拓扑便携式分析仪驱动程序_拔出便携式USB硬盘驱动器会损坏计算机吗?
  16. 谁能谈谈国外软件行业的实际情况么?(全美“50大好差事” 软件工程师排名第一)...
  17. CentOS7.6 无网络环境安装MySQL5.7.x
  18. 视频处理系列︱利用达摩院ModelScope进行视频人物分割+背景切换(一)
  19. 微信公众号开发(3)-实现关键词自动回复
  20. 2021年中国内地城市地铁客流量排行榜:北上广深日均客运量超500万人次,深圳客流强度最大(附年榜TOP43详单)

热门文章

  1. ShadowGun 体积光学习
  2. 鸿蒙系统底部任务栏无响应,win10底部任务栏无响应怎么办?win10底部任务栏无响应修复方法汇总...
  3. 联想电脑摄像头无法使用
  4. 飞鸽传书2007绿色版下载
  5. JVM监控Jconsole
  6. Ubuntu更新软件源
  7. 年底无心工作?给个摸鱼好去处。中国超级英雄【一方净土】,进来看看嘛
  8. 给定经纬度计算距离_根据两点经纬度计算距离!
  9. 计算机磁盘修复工具,CHKDSK磁盘修复工具使用教程
  10. 云盘万能钥匙插件(无需输入网盘提取密码)