对常用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://www.jb51.net/article/201169.htm .........................................................................................................................................................python 如何对logging日志封装
 

日志服务相关连接(详情在数据分类):

https://c4ys.com/archives/552 ....................................................................python+logstash+elasticsearch+Kibana日志方案

https://www.cnblogs.com/xuzhongtao/p/12466351.html ..............................Kibana搭建

python日志篇-基础版的更多相关文章

  1. Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice)

    Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Py ...

  2. Python入门篇-基础语法

    Python入门篇-基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编程基础 1>.程序 一组能让计算机识别和执行的指令. 程序 >.算法+ 数据结构= 程 ...

  3. 【python】文件下载---基础版

    基于TCP协议的基础版本,不支持大文件 Client.py import socket def main(): # 1. 创建套接字 tcp_socket = socket.socket(socket ...

  4. 01 基础版web框架

    01 基础版web框架 服务器server端python程序(基础版): import socket server=socket.socket() server.bind(("127.0.0 ...

  5. 深度学习入门者的Python快速教程 - 基础篇

      5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...

  6. [资料分享]Python视频教程(基础篇、进阶篇、项目篇)

    Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...

  7. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  8. Python之路,第一篇:Python入门与基础

    第一篇:Python入门与基础 1,什么是python? Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 2,python的特征: (1)易于学习,易于利用: (2)开 ...

  9. 零基础学python》(第二版)

    ---恢复内容开始--- 零基础学python>(第二版) python学习手册 可以离线下载,  .chn格式, 插入小幽默笑话,在学习累的时候看看笑话 放松一下 欢迎下载转载,请注明出处,谢 ...

  10. 《Python编程第4版 下》高清PDF|百度网盘免费下载|Python基础编程

    <Python编程第4版 下>高清PDF|百度网盘免费下载|Python基础编程 提取码:tz5v 当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为这 ...

随机推荐

  1. python爬虫学习——文件操作,异常处理

    文件操作 ''' f = open("a.txt","w") #打开一个文件, w模式(写),如果文件不存在就在当前目录下创建 f.write("he ...

  2. JZOJ 3234. 阴阳

    阴阳 题面 分析 个人认为是极好的题,很容易写 如果你学点分治是无奈背板的,那就做做这道题,加深你对点分治的理解 一般的,处理树上大规模统计问题,我们分治的关键是找一棵子树的重心 找到分治中心,即新一 ...

  3. C# HttpClient使用和注意事项,.NET Framework连接池并发限制

    System.Net.Http.HttpClient 类用于发送 HTTP 请求以及从 URI 所标识的资源接收 HTTP 响应. HttpClient 实例是应用于该实例执行的所有请求的设置集合,每 ...

  4. 权限维持之:DSRM 域控权限维持

    目录 1 修改 DSRM 密码 2 DSRM 域后门操作过程 3 DSRM 域后门防御 目录服务恢复模式(DSRM,Directory Services Restore Mode),是Windows服 ...

  5. js的map、filter的用法

    filter() 创建新数组,新数组放指定数组中符合条件的元素,满足条件的留下,是对原数组的过滤. map()    返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值,是对原数组的加工,映 ...

  6. nginx编译安装以及常用参数详解

    1 基于ansible role实现编译安装nginx 利用ansible控制端10.0.0.8机器,在被控制端10.0.0.18上部署nginx 首先打通ansible控制端与被控制端的基于key验 ...

  7. 生成brobuff

    xxx_pb.js需要服务端打包好 再新建export.js文件 var IMBaseDefine= require('./xxx_pb'); module.exports = { DataProto ...

  8. 实验一C语言开发环境使用和数据类型·运算符·表达式

    #include<stdio.h> int main(){ printf(" o \n"); printf("<H>\n"); prin ...

  9. 老毛桃WinPE以ISO镜像模式安装CentOS7

    准备: 一台新台式机(2TB磁盘),将用于安装centos 7,注意安装前请使用工具将磁盘分区先删除. 一个u盘,用户制作老毛桃winpe启动盘. 从www.laomaotao.org下载最新9.3增 ...

  10. disabled属性的简介和使用

    一.disabled属性的简介和使用 Html中的input元素.button元素.option元素等都具有一个disabled属性. disabled对a标签不起作用当赋予该属性时该元素将变得不可交 ...