我正在尝试根据提供的参数将日志记录到文件日志以及控制台。
该部分的代码如下:
logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s")
_logger = logging.getLogger(__name__)
fileHandler = logging.FileHandler("{0}/{1}.log".format(logPath,fileName),mode='a')
fileHandler.setLevel(logging.DEBUG)
fileHandler.setformatter(logFormatter)
_logger.addHandler(fileHandler)
def parse_args(args):
parser = argparse.ArgumentParser(
description="My Script")
parser.add_argument(
"-v","--verbose",dest="loglevel",help="set loglevel to INFO",action="store_const",const=logging.INFO)
parser.add_argument(
"-vv","--very-verbose",help="set loglevel to DEBUG",const=logging.DEBUG)
return parser.parse_args(args)
def setup_logging(loglevel):
logformat = "%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s"
logging.basicConfig(level=loglevel,stream=sys.stdout,format=logformat,datefmt="%Y-%m-%d %H:%M:%S")
def main(args):
args = parse_args(args)
setup_logging(args.loglevel)
_logger.info("Script starts here")
"""main code"""
_logger.info("Script ends here")
def run():
"""Entry point for console_scripts
"""
main(sys.argv[1:])
if __name__ == "__main__":
run()
当我使用-v
或-vv
参数运行脚本时,它运行良好,但是当我不希望在任何时候将所有日志保存在其中时,也不创建提供程序日志文件。
如何指定每次都要创建日志文件,并且仅在详细请求时stdout
被指定?
PS。 我已经将一些代码移至
def setup_logging(loglevel):
logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s")
if loglevel is not None:
logformat = "%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s"
logging.basicConfig(level=loglevel,datefmt="%Y-%m-%d %H:%M:%S")
_logger.setLevel(logging.DEBUG)
fileHandler = logging.handlers.TimedRotatingFileHandler("{0}/{1}.log".format(logPath,logFileName),when="midnight")
fileHandler.setformatter(logFormatter)
_logger.addHandler(fileHandler)
,它将一直记录到日志文件中,然后以详细记录输出,但是日志文件仅保存设置为INFO
的输出记录,没有显示为DEBUG
的内容,如以详细运行时可以看到的-vv