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

当使用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()



 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值