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编程(第四版)为这 ...
随机推荐
- KMP 算法(Knuth–Morris–Pratt algorithm)的基本思想
KMP 算法(Knuth–Morris–Pratt algorithm)的基本思想 阅读本文之前,您最好能够了解 KMP 算法解决的是什么问题,最好能用暴力方式(Brute Force)解决一下该问题 ...
- Vulhub 漏洞学习之:Drupal
Vulhub 漏洞学习之:Drupal 目录 Vulhub 漏洞学习之:Drupal 1 Drupal < 7.32 "Drupalgeddon" SQL注入漏洞(CVE-2 ...
- el-select 获取change点击index
<el-select> <el-option v-for="(item, index) in optionlist" @click.native ="h ...
- ArcGIS for Android 实现加载地图
创建第一个应用 1.前期项目准备 1.1. 创建新工程 新建一个空活动项目 选择语言.平台,修改命名等 1.2. 添加ArcGIS SDK build.gradle (Project: <pro ...
- 一文吃透 Go 内置 RPC 原理
hello 大家好呀,我是小楼,这是系列文<Go底层原理剖析>的第三篇,依旧分析 Http 模块.我们今天来看 Go内置的 RPC.说起 RPC 大家想到的一般是框架,Go 作为编程语言竟 ...
- z order curve
https://www.cnblogs.com/tgzhu/p/8286616.html
- mysql 服务安装与配置
数据库服务下载与安装: 下载地址:MySQL Community Server 安装:跟随引导一路下一步,建议配置root密码,不然安装成功cmd验证却是要求密码.没有密码还需要执行命令重新设置密码, ...
- 重写父类的ToString
我们任何对象调用ToString的时候,打出来的都是这个类的命名空间的名字 using System; using System.Collections.Generic; using System.L ...
- centos mininet安装-坑
https://blog.csdn.net/milesandnick/article/details/108017349?utm_medium=distribute.pc_relevant.none- ...
- 启动项目报错org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character ‘@‘
报错信息:org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character ...