从Bash运行Python脚本-如何重定向Python日志文件
我正在运行一系列来自bash脚本的python脚本 乙二醇从Bash运行Python脚本-如何重定向Python日志文件,python,logging,python-logging,Python,Logging,Python Logging,我正在运行一系列来自bash脚本的python脚本 乙二醇 nohup python$IMPORTER\u PATH/IMPORTER.py-t styles-e$ELASTIC\u URL-j$styles\u DATA\u PATH-b-f&>“$LOG\u PATH/styles-$(日期“+%d-%b-%Y”).LOG” nohup python$IMPORTER\u PATH/IMPORTER.py-t objects-e$ELASTIC\u URL-j$objects\u DATA\
nohup python$IMPORTER\u PATH/IMPORTER.py-t styles-e$ELASTIC\u URL-j$styles\u DATA\u PATH-b-f&>“$LOG\u PATH/styles-$(日期“+%d-%b-%Y”).LOG”
nohup python$IMPORTER\u PATH/IMPORTER.py-t objects-e$ELASTIC\u URL-j$objects\u DATA\u PATH-b-f&>“$LOG\u PATH/objects-$(日期“+%d-%b-%Y”).LOG”
目前,我正在使用&>
我的python脚本中到处都是有用的打印语句,比如print(“processstarted”)
,因此bash生成的日志文件确实有一些用处
但是,我最近一直在清理日志文件,并使用python日志记录模块来生成更集中的日志文件
下面是我的importer.py
脚本的摘录:
import argparse
导入日志记录
def parse_参数(参数):
parser=argparse.ArgumentParser()
parser.add_参数(“-t”,“--type”,help=“要导入的数据类型”)
def总管(argv):
#设置日志记录级别
logging.basicConfig(filename='importer.log',
filemode='w',level=logging.INFO)
es_log=logging.getLogger(“elasticsearch”)
es_log.setLevel(logging.WARNING)
args=parse_args(argv)
logging.info('以%s开头,args)
现在的问题是无论bash脚本从何处运行,importer.log
都会被创建,因为我已经设置了filemode='w'
,所以在调用每个python脚本时,它都会被覆盖
是否有方法将importer.log的输出重定向到我的日期日志文件,如“$log\u PATH/styles-$(date”+%d-%b-%Y”).log”
或者我应该向importer.py ArgumentParser添加另一个参数,并将目标路径和文件名传递给它?您可以根据需要格式化日志文件的名称。以下是一个例子:
from datetime import datetime
log_name = f"importer_{datetime.strftime(datetime.now(), '%Y-%m-%d')}.log"
# This becomes: importer_2020-11-27.log
您当然可以更改日期ecc的格式
您还可以使用以下选项:
import os
script_path = os.path.realpath(__file__)
# This points to your script: /path/to/script.py
如果要在此处保存日志,请获取脚本的路径
log_name = os.path.join(os.path.dirname(script_path), log_name)
# now together with the first snippet of code you get: /path/to/importer_2020-11-27.log
谢谢,这很有帮助,重命名日志可以确保每个进程都有不同的日志。