记录Python脚本的运行日志的方法

一、logging模块

Python中有一个模块logging,可以直接记录日志

#  日志级别
# CRITICAL 50
# ERROR  40
# WARNING 30
# INFO   20
# DEBUG  10

logging.basicConfig()函数中的具体参数:

filename:   指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中;
filemode:   文件打开方式,在指定了filename时使用这个参数,默认值为“w”还可指定为“a”;
format:      指定handler使用的日志显示格式;
datefmt:    指定日期时间格式。,格式参考strftime时间格式化(下文)
level:        设置rootlogger的日志级别
stream:     用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。
                  若同时列出了filename和stream两个参数,则stream参数会被忽略。

format参数中可能用到的格式化信息:


%(name)s


Logger的名字


%(levelno)s


数字形式的日志级别


%(levelname)s


文本形式的日志级别


%(pathname)s


调用日志输出函数的模块的完整路径名,可能没有


%(filename)s


调用日志输出函数的模块的文件名


%(module)s


调用日志输出函数的模块名


%(funcName)s


调用日志输出函数的函数名


%(lineno)d


调用日志输出函数的语句所在的代码行


%(created)f


当前时间,用UNIX标准的表示时间的浮 点数表示


%(relativeCreated)d


输出日志信息时的,自Logger创建以 来的毫秒数


%(asctime)s


字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒


%(thread)d


线程ID。可能没有


%(threadName)s


线程名。可能没有


%(process)d


进程ID。可能没有


%(message)s


用户输出的消息

二、logging模块测试

1、打印日志到标准输出中

import logging
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')

输出结果

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:/pyworkpeace/tupian.py 'https://www.tianyancha.com/login'
WARNING:root:warning message

Process finished with exit code 0

可以看出默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志。默认的日志的格式为:

日志级别:Logger名称:用户输出消息

2、将日志文件输入到文件中

import os
logging.basicConfig(filename=os.path.join(os.getcwd(),'log.txt'),level=logging.DEBUG)
logging.debug('this is a message')

运行这三行代码后会在安装Python的目录中出现一个log.txt文件,文件内容

DEBUG:root:this is a message
DEBUG:root:debug message

3、自定义格式,输出日志文件

# -*-coding:utf-8-*-

import logging

def console_out(logFilename):
  ''''' Output log to file and console '''
  # Define a Handler and set a format which output to file
  logging.basicConfig(
    level=logging.DEBUG, # 定义输出到文件的log级别,大于此级别的都被输出
    format='%(asctime)s %(filename)s : %(levelname)s %(message)s', # 定义输出log的格式
    datefmt='%Y-%m-%d %A %H:%M:%S', # 时间
    filename=logFilename, # log文件名
    filemode='w') # 写入模式“w”或“a”
  # Define a Handler and set a format which output to console
  console = logging.StreamHandler() # 定义console handler
  console.setLevel(logging.INFO) # 定义该handler级别
  formatter = logging.Formatter('%(asctime)s %(filename)s : %(levelname)s %(message)s') # 定义该handler格式
  console.setFormatter(formatter)
  # Create an instance
  logging.getLogger().addHandler(console) # 实例化添加handler

  # Print information       # 输出日志级别
  logging.debug('logger debug message')
  logging.info('logger info message')
  logging.warning('logger warning message')
  logging.error('logger error message')
  logging.critical('logger critical message')

if __name__ == "__main__":
  console_out('logging.log')

输出结果:

此时也会自动生成一个日志文件,日志文件和运行文件在同一个文件夹中,文件名logging.log

2017-10-23 Monday 11:37:59 hgghf : DEBUG logger debug message
2017-10-23 Monday 11:37:59 hgghf : INFO logger info message
2017-10-23 Monday 11:37:59 hgghf : WARNING logger warning message
2017-10-23 Monday 11:37:59 hgghf : ERROR logger error message
2017-10-23 Monday 11:37:59 hgghf : CRITICAL logger critical message

修改输出路径:

filename='/tmp/test1.log', # log文件名

当将脚本中这行代码换一下,那么我们输出日志的路径地址就换成了D:\tmp

下面的方式同样可以达到上述结果

 4、自定义输出位置

import logging
logging.basicConfig(level=logging.DEBUG,
          format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
          datefmt='%a, %d %b %Y %H:%M:%S',
          filename='/tmp/test.log',
          filemode='w') 

logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')

由于运行脚本放在D:\pyworkpeace\下,输出文件在D盘tmp文件夹下test.log,内容如下:

Mon, 23 Oct 2017 15:00:05 tupian.py[line:11] DEBUG debug message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:12] INFO info message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:13] WARNING warning message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:14] ERROR error message
Mon, 23 Oct 2017 15:00:05 tupian.py[line:15] CRITICAL critical message

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python日志记录模块实例及改进

    python 打印对象的所有属性值: def prn_obj(obj): print '\n'.join(['%s:%s' % item for item in obj.__dict__.items()]) Python logger对象属性(由上述函数获取的) name:get_data parent:<logging.RootLogger instance at 0x1d8bd88> handlers:[<logging.FileHandler instance at 0x21bcc

  • python logging重复记录日志问题的解决方法

    日志相关概念 日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level). 日志的作用 通过log的分析,可以方便用户了解系统或软件.应用的运行情况:如果你的应用log足够丰富,也可以分析以往用户的操作行为.类型喜好.地域分布或其他更多信息:如果一个应用的log同时也分了多个级别,那么可以很轻易地分析得到该应

  • Python Logging 日志记录入门学习

    Python Logging原来真的远比我想象的要复杂很多很多,学习路线堪比git.但是又绕不过去,alternatives又少,所以必须要予以重视,踏踏实实认认真真的来好好学学才行. 学习Logging的目的: 简单脚本还好,print足够. 但是稍微复杂点,哪怕是三四个文件加起来两三百行代码,调试也开始变复杂起来了. 再加上如果是后台长期运行的那种脚本,运行信息的调查更是复杂起来. 一开始我还在各种查crontab的日志查看,或者是python后台运行查看,或者是python stdout的

  • Python中使用logging和traceback模块记录日志和跟踪异常

    logging模块 logging模块用于输出运行日志,可以设置不同的日志等级,保存信息到日志文件中等. 相比print,logging可以设置日志的等级,控制在发布版本中的输出内容,并且可以指定日志的输出格式. 1. 使用logging在终端输出日志 #!/usr/bin/env python # -*- coding:utf-8 -*- import logging # 引入logging模块 # 设置打印日志级别 CRITICAL > ERROR > WARNING > INFO

  • Python记录详细调用堆栈日志的方法

    本文实例讲述了Python记录详细调用堆栈日志的方法.分享给大家供大家参考.具体实现方法如下: import sys import os def detailtrace(info): retStr = "" curindex=0 f = sys._getframe() f = f.f_back # first frame is detailtrace, ignore it while hasattr(f, "f_code"): co = f.f_code retSt

  • Python使用修饰器进行异常日志记录操作示例

    本文实例讲述了Python使用修饰器进行异常日志记录操作.分享给大家供大家参考,具体如下: 当脚本中需要进行的的相同的异常操作很多的时候,可以用修饰器来简化代码.比如我需要记录抛出的异常: 在log_exception.py文件中, import functools import logging def create_logger(): logger = logging.getLogger("test_log") logger.setLevel(logging.INFO) fh = l

  • Python 记录日志的灵活性和可配置性介绍

    对一名开发者来说最糟糕的情况,莫过于要弄清楚一个不熟悉的应用为何不工作.有时候,你甚至不知道系统运行,是否跟原始设计一致. 在线运行的应用就是黑盒子,需要被跟踪监控.最简单也最重要的方式就是记录日志.记录日志允许我们在开发软件的同时,让程序在系统运行时发出信息,这些信息对于我们和系统管理员来说都是有用的. 就像为将来的程序员写代码文档一样,我们应该让新软件产生足够的日志供系统的开发者和管理员使用.日志是关于应用运行状态的系统文件的关键部分.给软件加日志产生句时,要向给未来维护系统的开发者和管理员

  • 记录Python脚本的运行日志的方法

    一.logging模块 Python中有一个模块logging,可以直接记录日志 # 日志级别 # CRITICAL 50 # ERROR 40 # WARNING 30 # INFO 20 # DEBUG 10 logging.basicConfig()函数中的具体参数: filename:   指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中: filemode:   文件打开方式,在指定了filename时使用这个参数,默认值为"w"还可指定为"

  • Python脚本处理空格的方法

    最近小编遇到一个奇葩问题,就是上传代码时拷贝vs里面的代码不能直接粘贴,否则空格会不符合要求,怎么解决此问题呢?下面小编给大家分享我的解决方案,希望能够帮助到大家! 去掉空格代码 # -*- coding: utf-8 -*- '''打开delSpace.txt文本并删除每行开头的八个空格''' f=open("delSpace.txt") lines=f.readlines() for line in lines: '''第8位至倒数第1位(但不包含它)''' print line[

  • python脚本监控Tomcat服务器的方法

    文章出处:https://blog.csdn.net/sdksdk0/article/details/80933444 作者:朱培      ID:sdksdk0     -------------------------------------------------------------------------------------------- 对于最近的开发环境,偶尔会有挂掉的现象发生,然而并没有及时发现,下载需要添加一个监控功能,当服务挂掉的时候需要有邮件提醒,同时我们的系统每天晚

  • Java程序中实现调用Python脚本的方法详解

    本文实例讲述了Java程序中实现调用Python脚本的方法.分享给大家供大家参考,具体如下: 在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法. 1.在Eclipse中新建Maven工程: 2.pom.xml文件中添加如下依赖包之后update maven工程: <dependency> <groupId>org.python</groupId> <artifactId>jython</ar

  • 调用其他python脚本文件里面的类和方法过程解析

    这篇文章主要介绍了调用其他python脚本文件里面的类和方法过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 问题描述: 自己编写了若干个Python脚本. 在testC.py里面需要调用testA.py和testB.py里面的若干类和方法.要怎么办? 需要都打包.安装,再去调用吗? 其实不必那么麻烦. 这里有个前提,testA.py, testB.py, testC.py在同级目录下. 如果不在同级目录,后面会补充介绍如何把路径包含过来

  • aws 通过boto3 python脚本打pach的实现方法

    脚本要实现的功能:输入instance id 1:将所有的volume take snapshot 2:  获取public ip 并登陆机器执行 ps 命令记录patch前进程状态已经端口状态 3:获取机器所在的elb 4:  从elb中移除当前机器 5:检查snapshots是否完成 6:snapshots完成后patching 7:  patching完成后将instance加回到elb #!/usr/bin/python # vim: expandtab:tabstop=4:shiftw

  • python记录程序运行时间的三种方法

    python记录程序运行时间的三种方法              这里提供了python记录程序运行时间的三种方法,并附有实现代码,最后进行比较,大家参考下: 方法1 import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.now() print (endtime - starttime).seconds 方法 2 start = time.time() run_f

  • Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例

    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/child_process.html,NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入.标准输出及标准错误输出的接口. NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 标准输入.标准输出及标准错误输出的接口 child.stdin 获取标准输入 child.

  • Python脚本实时处理log文件的方法

    这个Python脚本是用来对实时文件的内容监控,比如 Error 或者 time out 字段都可以进行自定义:算是我的第一个真正的Python脚本,自己感觉还是比较臃肿,不过打算放到blog上记录一下(还是初学者,大神们勿喷哈),真心希望博友们能够再指点一下(现在记录每次的文件大小值是输出到了一个文件中,并且里面还嵌套了有shell命令,这些我认为都是可以优化掉的吧,只是现在我还不知道怎么做):告警是基于zabbix,自定义的模板是120s执行一次 #!/usr/local/bin/pytho

随机推荐