私はworkflow.pyとして2つのpythonスクリプトを持っていて、他はtask.pyです。 workflow.pyはtask.pyのワークフローを定義しているため、内部にはtask.pyのコンストラクタをインスタンス化するためのメインだけがあります。次のようにworflow.pyの構造は以下の通りである:今ワークフローを定義する2つのスクリプトとすべての関数を含む1つのスクリプト用にPythonで単一ロガーを実装する方法は?
workflow.py
from optparse import OptionParser
from optparse import OptionGroup
from task import *
def main():
dir = os.path.dirname(os.path.abspath(sys.argv[0]))
try:
parser = parse_options(parser, dir)
(options, args) = parser.parse_args()
print ("everything working fine in workflow")
except SystemExit:
return 0
task_object = task_C(options.source_dir, options.target, options.build_dir)
print ("workflow is reached")
task_object.another_funct()
##following 3 lines is when set_logger is defined
log = task_object .set_logger()
log.info(""workflow is reached"")
log.info("more info if required")
def parser(parser, dir):
group = OptionGroup(parser, "Prepare")
group.add_option("-t", "--target",action="store", dest="target",
help="Specifies the target.")
group.add_option("-s", "--Source",action="store", dest="source_dir",
help="Specifies the source dir.")
group.add_option("-b", "--build",action="store", dest="build_dir",
help="Specifies the build dir.")
parser.add_option_group(group)
task.py
class task_C():
def __init__(self, source_dir, target, build_dir):
self.target = self.settargetplatform(target)
self.source_dir = self.setsourcedir(source_dir)
self.build_dir = self.setbuilddir(build_dir)
def settargetplatform(target):
...sets target dir
def setsourcedir(source_dir):
...sets source_dir
def setbuilddir(build_dir):
..sets build_dir
def another_funct():
print ("inside the another funct")
print ("some usefull info")
print ("...")
##following part after adding set_logger then using logger
log = self.set_logger()
log.info("inside the another funct")
log.info(" some usefull info")
log.info ("...")
.
def set_logger(self):
logging.basicConfig()
l = logging.getLogger('root')
l.setLevel(logging.DEBUG)
formatter = logging.Formatter(' %(levelname)s : %(message)s')
fileHandler = logging.FileHandler(self.build_dir+"/root.log", mode='w')
fileHandler.setFormatter(formatter)
l.addHandler(fileHandler)
、上記のスクリプトではtask.pyコンストラクタがワークフロー内部呼び出され、各種印刷ステートメントは、両方のスクリプトであり、iはだろうことが示されているようにprintステートメントの代わりにロガーを持つようにして、その目的のためにログをlocation "build_dir"の中に入れたいが、その場所はtask.pyの中に設定されているので、workflow.pyの中に別の関数を追加したくない'build_dir'を取り戻します。 task.pyの中でset_logger()関数をtask.pyの中に追加しました。これは私の目的に役立つかもしれませんが、ログにはすべてNULL NULL NULLが入っています。だから、私はどのように私はこれらの2つのスクリプトですべての印刷ステートメントを含む1つのログを持つことができますと私は何を改善する必要が示唆?
に
set_logger()
の終わりにreturn l
を追加すでにtask.pyに定義されているので、そこに位置を定義する必要はありません。ワークフローでは、すでにtask.pyに設定されているロガーと同じ場所を定義したくありません。 – newlearner