如何创建日志文件来记录python中的每个步骤?

时间:2015-03-18 18:04:11

标签: python linux unix

我正在运行python脚本,我想记录python程序的每个步骤。

例如,假设我有一个程序

def main()
    if do:
       do the work
       if yes:
          do the work
          for list os.listdir(dir):
              sys.system("python " + dirOfPython + " " + dirOflists)

我想记录我的程序在哪里......以及他们目前正在做什么。

在我的日志中,我想要类似

的内容
Inside of main()
inside of if do:
doing work
inside of if yes:
doing work
inside of for each files/dirs calling list
calling sys.system python
executing python with give dir path

不完全是什么上面..但是某种日志来查看程序正在做什么以及如果它失败了这个日志将包含失败日志的错误信息

我只想要一个正式的日志文件

2 个答案:

答案 0 :(得分:1)

你知道,有一个logging模块!

import logging
import os

logging.basicConfig(filename='tmp.log',
                    format='%(levelname)s %(asctime)s :: %(message)s',
                    level=logging.DEBUG)
# format is a formatter string, level shows what level of logs it will record
# in this case it is everything!
# Levels are as follows from most to least critical
#   CRITICAL
#   ERROR
#   WARNING
#   INFO
#   DEBUG

do = True
yes = True
do_the_work = lambda: None

def main():
    logging.debug("Inside of main()")
    if do:
        logging.debug("Inside of if do:")
        do_the_work()
        logging.debug("doing work")
        if yes:
            logging.debug("inside of if yes:")
            do_the_work()
            logging.debug("doing work")
            for list in os.listdir('.'): # there were three files in my folder
                logging.debug("inside of for each files/dirs calling list")
                print('python')
                logging.debug("calling sys.system python")
                logging.debug("executing python with give dir path")

这将产生以下输出:

DEBUG 2015-03-18 12:26:59,272 :: Inside of main()
DEBUG 2015-03-18 12:26:59,272 :: Inside of if do:
DEBUG 2015-03-18 12:26:59,272 :: doing work
DEBUG 2015-03-18 12:26:59,272 :: inside of if yes:
DEBUG 2015-03-18 12:26:59,272 :: doing work
DEBUG 2015-03-18 12:26:59,272 :: inside of for each files/dirs calling list
DEBUG 2015-03-18 12:26:59,272 :: calling sys.system python
DEBUG 2015-03-18 12:26:59,272 :: executing python with give dir path
DEBUG 2015-03-18 12:26:59,272 :: inside of for each files/dirs calling list
DEBUG 2015-03-18 12:26:59,272 :: calling sys.system python
DEBUG 2015-03-18 12:26:59,272 :: executing python with give dir path
DEBUG 2015-03-18 12:26:59,272 :: inside of for each files/dirs calling list
DEBUG 2015-03-18 12:26:59,272 :: calling sys.system python
DEBUG 2015-03-18 12:26:59,272 :: executing python with give dir path

您可以轻松捕获异常并让它们抛出更多重要事件。

try:
    really_important_method()
except EndOfTheWorldError:
    logging.critical("Duck and cover boys, it's gonna blow.")

答案 1 :(得分:0)

I think in program you need to know what is executing currently and what is the flow of the program and where it is breaking, this is where logs come into picture. For this you can use this pip library function-logger.

(INSTALLING) Install it with the following command:

pip install function-logger

(IMPORT STATEMENT) Inside your code import this library

from function_logger import function_logger

(USAGE) how to use Use it like the decorator on any function for which you want to see logs ex:

@function_logger(logger)
def log_function(name=None, age=None):
    logger.debug("Inside log function")
    return dict(bmi=19)

Output:

Inside Function log_function with parameters: (),{'name': 'hello', 'age': 23'}
Inside log function
Function: log_function returns 19