文章目录

  • 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 将控制台输出另存为日志文件相关推荐

  1. python文件输出-python将控制台输出保存至文件的方法

    很多时候在Linux系统下运行python程序时,控制台会输出一些有用的信息.为了方便保存这些信息,有时需要对这些信息进行保存.这里介绍几种将控制台输出保存到文件中的方式: 1 重定向标准输出流 重定 ...

  2. python将控制台输出保存至文件

    很多时候在Linux系统下运行python程序时,控制台会输出一些有用的信息.为了方便保存这些信息,有时需要对这些信息进行保存.这里介绍几种将控制台输出保存到文件中的方式: 1 重定向标准输出流 重定 ...

  3. Linux后台运行python程序并输出到日志文件

    后台运行python程序并标准输出到文件 现在有test.py程序要后台部署, 里面有输出内容 使用命令: nohup python -u test.py > test.log 2>&am ...

  4. pomelo配置logger时日志无法输出到日志文件的问题解决方案

    在使用pomelo的过程中发现log4js的日志无法输出到日志文件,解决办法如下: 1.删除工程目录下 ./node_modules/pomelo/node_modules/pomelo-logger ...

  5. 【Python】RotatingFileHandler:log日志文件自定义大小+滚动输出

    Python官方文档- RotatingFileHandler 代码示例1 示例:循环输出语句file test,打印到日志中. 运行后效果: 打开其中一个,内容如下: 源码 # -*- coding ...

  6. python报错输出到日志_Python日志记录和子进程输出和错误流

    基于Adam Rosenfield's code,你可以 >使用select.select来阻止,直到有要读取的输出 proc.stdout或proc.stderr, >然后读取并记录该输 ...

  7. Linux 自定义service,并重定向输出到日志文件

    最近由于项目需要,需后台运行java application,进行一些操作,并将屏幕输出定向到日志文件中. 首先将jiar 文件拷贝到linux.这里我放在 /home/jerry 输入命令 cd / ...

  8. python 输出彩色字体代码,python实现控制台输出彩色字体

    python控制台输出彩色字体,供大家参考,具体内容如下 import ctypes, sys STD_INPUT_HANDLE = -10 STD_OUTPUT_HANDLE = -11 STD_E ...

  9. 如何将控制台输出到txt文件,作为日志文件?

    程序名 > 文件名.txt 具体例子如下: 运行代码如下: import glob import shutil import tqdmfile_path = "E:\\new_trai ...

最新文章

  1. 学习笔记97—matlab 获取矩阵中特定值的坐标
  2. Java并发程序设计(八)设计模式与并发之单例模式
  3. python学习-综合练习(平方根、海伦公式、随机数、转换函数、数值交换)
  4. html图片自动循环轮播图,js实现图片无缝循环轮播
  5. 一分钟看懂Docker的网络模式和跨主机通信
  6. Redfish数据中心管理标准详解
  7. 软件工程课程实践- 项目开发计划
  8. dpp-enrollee配网
  9. 零跑汽车上半年表现亮眼,全域自研能力加持下业绩高速增长
  10. 网络安全实战之植入后门程序
  11. MathType无法加载mathpage.wll文件
  12. 多个PDF文件合并方法
  13. 2014-2020年国有大型商业银行和全国股份制商业银行绿色信贷数据
  14. Learning to Rank(LTR)(转)
  15. 同步通讯和异步通讯的区别
  16. SREcon大会预告 | 百度运维专家对智能故障诊断的思考
  17. 硬盘空间免费扩容2T!!!
  18. 白帽子黑客教你:如何下载Windows原版操作系统?(2种方式)
  19. border:none以及border:0的区别
  20. Android事件分发机制在实战开发中的应用之二

热门文章

  1. 阿里云服务器可以做什么?十大使用场景举例说明
  2. 【C语言】初识指针(一)
  3. 使用ReadyFor4GB
  4. 详解 Laravel 中的依赖注入和 IoC
  5. PHP_EOL是什么意思?
  6. 特斯拉开放FSD测试版软件,马斯克:7天内驾驶记录良好的车主优先
  7. 虚拟机 如何打开3D加速
  8. Java播放mp3并简单实现歌词同步
  9. 百度地图API之折线
  10. Latex局部设置字体大小