Python 将控制台输出另存为日志文件
文章目录
- Python 将控制台输出另存为日志文件
- 需求
- 方法一:使用 Logger 类(推荐)
- 方法二:仅使用 sys
- 方法三:使用 logging 模块
- 参考文献
Python 将控制台输出另存为日志文件
需求
在 PyCharm 中或者说运行 python 程序时会使用 print 输出些过程信息、 traceback 异常信息 到控制台,但是程序运行结束后记录就没有了,所以想着每次运行将信息显示在控制台的同时记录到文件中。
方法一:使用 Logger 类(推荐)
自定义创建 Logger 类,结合 sys 进行记录控制台输出信息
demo.py
import sys
import os
import time# 控制台输出记录到文件
class Logger(object):def __init__(self, file_name="Default.log", stream=sys.stdout):self.terminal = streamself.log = open(file_name, "a")def write(self, message):self.terminal.write(message)self.log.write(message)def flush(self):passif __name__ == '__main__':# 自定义目录存放日志文件log_path = './Logs/'if not os.path.exists(log_path):os.makedirs(log_path)# 日志文件名按照程序运行时间设置log_file_name = log_path + 'log-' + time.strftime("%Y%m%d-%H%M%S", time.localtime()) + '.log'# 记录正常的 print 信息sys.stdout = Logger(log_file_name)# 记录 traceback 异常信息sys.stderr = Logger(log_file_name)print(5555)print(2/0)
./Logs/log-20210103-140231.log
5555
Traceback (most recent call last):File "G:\Codes\demo.py", line 33, in <module>print(2/0)
ZeroDivisionError: division by zero
方法二:仅使用 sys
将所有输出全部直接保存到文件中,不再显示到控制台
demo.py
import syslog_print = open('Defalust.log', 'w')
sys.stdout = log_print
sys.stderr = log_printif __name__ == '__main__':print(555)print(2/0)
Default.log
555
Traceback (most recent call last):File "G:\Codes\demo.py", line 9, in <module>print(2/0)
ZeroDivisionError: division by zero
方法三:使用 logging 模块
功能更加全面,主要用于输出运行日志、设置输出日志的等级、日志保存路径等等
必须放到 try……catch…… 里面才能保存 traceback 的错误的信息,然后不能保存 print (如果要保存可以参考方法二,但是这样控制台就没有 print 了)
demo.py
import logging
import os
import time
import traceback
import sys# 创建一个 logger
logger = logging.getLogger(__name__)
# logger 的等级
logger.setLevel(level=logging.INFO)
# 创建一个 handler,写入日志文件
log_path = './Logs/'
if not os.path.exists(log_path):os.makedirs(log_path)
log_file_name = log_path + 'log-' + time.strftime("%Y%m%d-%H%M%S", time.localtime()) + '.log'
logfile = log_file_name
handler = logging.FileHandler(logfile, mode='a+')
# 输入到日志文件中的日志等级
handler.setLevel(logging.DEBUG)
# 设置 handler 中日志记录格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# 将 handler 添加到 logger 里面
logger.addHandler(handler)# 将日志输出到控制台,默认 sys.stderr
logger.addHandler(logging.StreamHandler(sys.stdout))logger.info("Start print log")if __name__ == '__main__':try:print(5555555555)print(5/0)except Exception as e:logger.error(str(traceback.format_exc()))
log-20210103-151751.log
2021-01-03 15:17:51,597 - __main__ - INFO - Start print log
2021-01-03 15:17:51,597 - __main__ - ERROR - Traceback (most recent call last):File "G:\Codes\demo.py", line 34, in <module>print(5/0)
ZeroDivisionError: division by zero
参考文献
【1】16.6. logging — Logging facility for Python — Python 3.6.12 documentation
【2】Overview — loguru documentation
Python 将控制台输出另存为日志文件相关推荐
- python文件输出-python将控制台输出保存至文件的方法
很多时候在Linux系统下运行python程序时,控制台会输出一些有用的信息.为了方便保存这些信息,有时需要对这些信息进行保存.这里介绍几种将控制台输出保存到文件中的方式: 1 重定向标准输出流 重定 ...
- python将控制台输出保存至文件
很多时候在Linux系统下运行python程序时,控制台会输出一些有用的信息.为了方便保存这些信息,有时需要对这些信息进行保存.这里介绍几种将控制台输出保存到文件中的方式: 1 重定向标准输出流 重定 ...
- Linux后台运行python程序并输出到日志文件
后台运行python程序并标准输出到文件 现在有test.py程序要后台部署, 里面有输出内容 使用命令: nohup python -u test.py > test.log 2>&am ...
- pomelo配置logger时日志无法输出到日志文件的问题解决方案
在使用pomelo的过程中发现log4js的日志无法输出到日志文件,解决办法如下: 1.删除工程目录下 ./node_modules/pomelo/node_modules/pomelo-logger ...
- 【Python】RotatingFileHandler:log日志文件自定义大小+滚动输出
Python官方文档- RotatingFileHandler 代码示例1 示例:循环输出语句file test,打印到日志中. 运行后效果: 打开其中一个,内容如下: 源码 # -*- coding ...
- python报错输出到日志_Python日志记录和子进程输出和错误流
基于Adam Rosenfield's code,你可以 >使用select.select来阻止,直到有要读取的输出 proc.stdout或proc.stderr, >然后读取并记录该输 ...
- Linux 自定义service,并重定向输出到日志文件
最近由于项目需要,需后台运行java application,进行一些操作,并将屏幕输出定向到日志文件中. 首先将jiar 文件拷贝到linux.这里我放在 /home/jerry 输入命令 cd / ...
- python 输出彩色字体代码,python实现控制台输出彩色字体
python控制台输出彩色字体,供大家参考,具体内容如下 import ctypes, sys STD_INPUT_HANDLE = -10 STD_OUTPUT_HANDLE = -11 STD_E ...
- 如何将控制台输出到txt文件,作为日志文件?
程序名 > 文件名.txt 具体例子如下: 运行代码如下: import glob import shutil import tqdmfile_path = "E:\\new_trai ...
最新文章
- 学习笔记97—matlab 获取矩阵中特定值的坐标
- Java并发程序设计(八)设计模式与并发之单例模式
- python学习-综合练习(平方根、海伦公式、随机数、转换函数、数值交换)
- html图片自动循环轮播图,js实现图片无缝循环轮播
- 一分钟看懂Docker的网络模式和跨主机通信
- Redfish数据中心管理标准详解
- 软件工程课程实践- 项目开发计划
- dpp-enrollee配网
- 零跑汽车上半年表现亮眼,全域自研能力加持下业绩高速增长
- 网络安全实战之植入后门程序
- MathType无法加载mathpage.wll文件
- 多个PDF文件合并方法
- 2014-2020年国有大型商业银行和全国股份制商业银行绿色信贷数据
- Learning to Rank(LTR)(转)
- 同步通讯和异步通讯的区别
- SREcon大会预告 | 百度运维专家对智能故障诊断的思考
- 硬盘空间免费扩容2T!!!
- 白帽子黑客教你:如何下载Windows原版操作系统?(2种方式)
- border:none以及border:0的区别
- Android事件分发机制在实战开发中的应用之二