欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python将日志同时输出到控制台(屏幕)与文件

程序员文章站 2022-07-15 15:54:31
...

当使用python训练模型或者做其他比较耗时又需要时刻观察变量的任务时, 通常会在屏幕上print一些信息. 然而当信息很多的时候, 或者电脑死机了, 一种比较好的方式就是把日志保存到本地.


1.使用logging模块
logging有不同的日志等级, 参考

日志等级(level) 描述
DEBUG 最详细的日志信息,典型应用场景是 问题诊断
INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息

示例代码:

import datetime
import logging
# 输出到console
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG) # 指定被处理的信息级别为最低级DEBUG,低于level级别的信息将被忽略
# 输出到file
fh = logging.FileHandler("log_%s.txt"%(datetime.datetime.now().strftime('%Y%m%d-%H-%M-%S')), mode='w', encoding='utf-8')  # 不拆分日志文件,a指追加模式,w为覆盖模式
fh.setLevel(logging.DEBUG)
        
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(ch)
logger.addHandler(fh)


for i in range(10):
    logger.debug(i)



2.使用两个print
示例代码:

import datetime

# 自定义print函数, 先输出到console, 再输出到日志文件
def cprint(s, end='\n', log_file=None):
    print(s, end=end)
    if log_file is not None:
        print(s, end=end, file=log_file)


    
log_file = open("log_%s.txt"%(datetime.datetime.now().strftime('%Y%m%d-%H-%M-%S')), 'w')
for i in range(10):
    cprint(i, end='-', log_file=log_file)
cprint('', end='\n', log_file=log_file) # 另起一行
for i in range(10):
    cprint(i, end='-', log_file=log_file)
if log_file is not None:
    log_file.close()



 

相关标签: python