python日志篇-基础版
对常用python日志语法做记录,方便以后重复使用
print内容记录到文件:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
##______________________命令行执行test.py文件并写入执行结果到abc.log文件_____________________
# -*- coding: UTF-8 -*-
for i in range(1,21):
print("the number is {}".format(i)) '''
在cmd中运行
python test.py>adc.log
'''
##————————————————————————直接运行就可以记录打印内容————————————————————————————————
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
origin = sys.stdout#标准输出文件
#打开文件并执行控制台
f = open('file.txt', 'w')
sys.stdout = f
print ('开始记录打印内容')
a=555
print('a=',a)
print ('Start of progeeeeeeeeeeeeeeeeeeeram')
# 你的程序放到这里,过程中所有print到屏幕的内容都同时保存在file.txt里面了。
print ('End of program')
sys.stdout = origin
f.close()
#——————————————————print_wire.py模块——————直接执行或通过导入模块名执行即可————————————————————————————————
#!/usr/bin/env python
# encoding: utf-8
import sys
import time class Logger(object):
def __init__(self, filename="Default.log"):
self.terminal = sys.stdout
self.log = open(filename, "a")#a表示追加,w覆盖写入 def write(self, message):
self.terminal.write(message)
if '下载进度' not in message:#过滤下载进度的日志
#a=str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
self.log.write(message) def flush(self):
pass now = time.strftime("%Y-%m-%d", time.localtime())#获取当前日期
sys.stdout = Logger('123456.txt')#存放文件名 if __name__ == '__main__':
__console__=sys.stdout
print('---------start---------')
print('1234567890123456789')
print('---------stop---------')
sys.stdout=__console__
time.sleep(10) '''
如果在其他模块需要记录print内容,只需import rint_wire即可
'''
python logging日志封装:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: zhangjun
# @Date : 2018/7/26 9:20
# @Desc : Description import logging
import logging.handlers
import os
import time class logs(object):
def __init__(self):
self.logger = logging.getLogger("")
## 设置输出的等级
LEVELS = {'NOSET': logging.NOTSET,
'DEBUG': logging.DEBUG,
'INFO': logging.INFO,
'WARNING': logging.WARNING,
'ERROR': logging.ERROR,
'CRITICAL': logging.CRITICAL}
##_________________________同时打印控制台并写入文件____________________________________
## 创建文件目录
logs_dir="logs2"
if os.path.exists(logs_dir) and os.path.isdir(logs_dir):
pass
else:
os.mkdir(logs_dir)
## 修改log保存位置
timestamp=time.strftime("%Y-%m-%d",time.localtime())
logfilename='%s.txt' % timestamp
logfilepath=os.path.join(logs_dir,logfilename)
rotatingFileHandler = logging.handlers.RotatingFileHandler(filename =logfilepath,
maxBytes = 1024 * 1024 * 50,
backupCount = 5)
## 设置输出格式
formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
rotatingFileHandler.setFormatter(formatter)
## 控制台句柄
console = logging.StreamHandler()
console.setLevel(logging.NOTSET)
console.setFormatter(formatter)
## 添加内容到日志句柄中
self.logger.addHandler(rotatingFileHandler)
self.logger.addHandler(console)
self.logger.setLevel(logging.NOTSET) ##___________________________只打印控制台不写入文件____________________________________________
# logging.basicConfig(level=logging.DEBUG,
# format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') #__________________________只写入文件不打印控制台______________________________________________
# ## 创建文件目录
# logs_dir="logs2"
# if os.path.exists(logs_dir) and os.path.isdir(logs_dir):
# pass
# else:
# os.mkdir(logs_dir)
# ## 修改log保存位置
# timestamp=time.strftime("%Y-%m-%d",time.localtime())
# logfilename='%s.txt' % timestamp
# logfilepath=os.path.join(logs_dir,logfilename)
# rotatingFileHandler = logging.handlers.RotatingFileHandler(filename =logfilepath, maxBytes = 1024 * 1024 * 50,backupCount = 5)
# ## 设置输出格式
# formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
# rotatingFileHandler.setFormatter(formatter)
# ## 添加内容到日志句柄中
# self.logger.addHandler(rotatingFileHandler)
# self.logger.setLevel(logging.NOTSET) def info(self, message):
self.logger.info(message) def debug(self, message):
self.logger.debug(message) def warning(self, message):
self.logger.warning(message) def error(self, message):
self.logger.error(message) if __name__ == '__main__':
logger = logging.getLogger(__name__)
logger=logs()
logger.info("this is info")
logger.debug("this is debug")
logger.error("this is error")
#logger.warning("this is warning") # #在其他模块调用日志
# import logging
# logger = logging.getLogger(__name__)
# import 日志的模块
# if __name__ == '__main__':
# logger=日志模块.logs()
# logger.info("this is info")
# logger.debug("this is debug")
# logger.error("this is error")
# logger.warning("this is warning")
第三方loguru模块处理日志:
如果想更简洁,可用loguru库,python3安装:pip3 install loguru。
loguru默认的输出格式是上面的内容,有时间、级别、模块名、行号以及日志信息,不需要手动创建 logger,直接使用即可,另外其输出还是彩色的,看起来会更加友好。
from loguru import logger
logger.debug('this is a debug message')
logger.info('this is another debug message')
logger.warning('this is another debug message')
logger.error('this is another debug message')
logger.info('this is another debug message')
logger.success('this is success message!')
logger.critical('this is critical message!')

写入文件:
from loguru import logger
logger.add('my_log.log')
logger.debug('this is a debug')
运行之后会发现目录下 my_log.log 出现了刚刚控制台输出的 DEBUG 信息
相关连接:
https://mp.weixin.qq.com/s?__biz=MzkxNDI3NjcwMw==&mid=2247493818&idx=1&sn=1b913b843f60b522041dcd0807f2ba2f .....................loguru一行代码搞定Python日志
https://blog.csdn.net/cui_yonghua/article/details/107498535 ........................................................................................................................loguru详细用法(好处:不用学代码直接调用即可)
日志服务相关连接(详情在数据分类):
https://c4ys.com/archives/552 ....................................................................python+logstash+elasticsearch+Kibana日志方案
https://www.cnblogs.com/xuzhongtao/p/12466351.html ..............................Kibana搭建
python日志篇-基础版的更多相关文章
- Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice)
Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Py ...
- Python入门篇-基础语法
Python入门篇-基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编程基础 1>.程序 一组能让计算机识别和执行的指令. 程序 >.算法+ 数据结构= 程 ...
- 【python】文件下载---基础版
基于TCP协议的基础版本,不支持大文件 Client.py import socket def main(): # 1. 创建套接字 tcp_socket = socket.socket(socket ...
- 01 基础版web框架
01 基础版web框架 服务器server端python程序(基础版): import socket server=socket.socket() server.bind(("127.0.0 ...
- 深度学习入门者的Python快速教程 - 基础篇
5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...
- [资料分享]Python视频教程(基础篇、进阶篇、项目篇)
Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python之路,第一篇:Python入门与基础
第一篇:Python入门与基础 1,什么是python? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2,python的特征: (1)易于学习,易于利用: (2)开 ...
- 零基础学python》(第二版)
---恢复内容开始--- 零基础学python>(第二版) python学习手册 可以离线下载, .chn格式, 插入小幽默笑话,在学习累的时候看看笑话 放松一下 欢迎下载转载,请注明出处,谢 ...
- 《Python编程第4版 下》高清PDF|百度网盘免费下载|Python基础编程
<Python编程第4版 下>高清PDF|百度网盘免费下载|Python基础编程 提取码:tz5v 当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为这 ...
随机推荐
- jmeter常见错误(持续更新)
1. jmeter java.net.NoRouteToHostException: Cannot assign requested address (Address not available) 压 ...
- 代码随想录算法训练营day10 | leetcode 232.用栈实现队列 225. 用队列实现栈
基础知识 使用ArrayDeque 实现栈和队列 stack push pop peek isEmpty() size() queue offer poll peek isEmpty() size() ...
- Postgres14.4(Docker安装)
Postgres14.4(Docker安装) 一,Docker拉取镜像 docker pull postgres:14.4 #检查镜像是否拉取成功 docker images | grep postg ...
- 置顶TOP
HTML <a href="javascript:void(0)" class="go-top" @click="goTop"> ...
- OpenLayers与百度高德等常见地图坐标系
1. OpenLayers坐标系 OpenLayers中,创建一个Map,默认的显示(View)的投影坐标系是EPSG:3857,常见的另一个坐标系是 EPSG:4326 参考官方API文档:Open ...
- CF1470E 题解 —— 询问分叉转构建虚树的复杂度证明
简要题意:给定一个长为 \(n\) 的排列 \(p\) 和一个整数 \(c\le 4\),称排列 \(p'\) 合法当且仅当 \(p'\) 可以通过 \(p\) 翻转若干个不交的区间 \([l,r]\ ...
- C语言数据结构串的表示与操作的实现
串的堆分配储存表示 typedef struct { char* ch;//若是非空字符串,则按串长分配存储区,否则ch为NULL int length;//串长度 } HString; 生成一个其值 ...
- 在线设计器 DesignO 的分析
需求分析 现有POD网站的在线编辑器不是很好用. 可配置性不强,素材无法在后台实现管理 可扩展性不强,无法应用于多个行业,比如包装.服装 产品分析 官方网站:https://www.designnbu ...
- centos7 安装MariaDB数据库
1.添加 MariaDB yum源 #添加MariaDB.repo配置文件 vim /etc/yum.repos.d/MariaDB.repo #添加内容 [mariadb] name = Maria ...
- 魔兽世界2009年更换代理,九城CEO至全体员工公开信
尊敬的全体第九城市员工, 最近一段时间以来,有关九城将要失去<魔兽世界>代理权的说法甚嚣尘上,各种传言四起.在目前来自<魔兽世界>的收入仍占九城收入绝大部分的情况下,对于外界的 ...