问题描述
希望使用日志记录模块设置多个日志文件。能够记录但在 file_handler 的(log_file.log 和 debug_file.log)中获得重复的日志消息。任何帮助,我们如何消除重复消息 日志文件(log_file.log 和 debug_file.log)。
Stream 处理程序的预期输出看起来不错,没有重复的消息,并且在两个日志文件中都期望有相同的消息行
文件结构
MainScript.py
function_program.py
first_script.py
second_script.py
logconfig.yaml
MainScript.py 调用 first_script.py 并且 first 将调用 second_script.py function_program.py 是一个通用模块,在所有脚本中都被导入
脚本
###MainScript.py#######################
import logging,subprocess
import function_program as log
def main():
logger.info(f'Main Program line1 : Calling First Script')
logger.info(f'Main Program line2 : {log.file_path("first_script.py")}')
return_code = subprocess.Popen(['python',f'{log.file_path("first_script.py")}'],stdout=subprocess.PIPE,stderr=subprocess.STDOUT,universal_newlines=True)
logger.info(f'Main script line3 : Return Code -- {return_code.communicate()[0]}')
if __name__ == '__main__':
logger = log.logfun()
main()
###function_program.py#######################
import os
import logging
import logging.config
import yaml
logger = logging.getLogger()
def logfun():
with open('logconfig.yaml','r') as f:
cfg = yaml.safe_load(f.read())
logging.config.dictConfig(cfg)
return logging.getLogger('function_program')
def file_path(filename):
# logger.debug('Common Function program file_path() function call')
return os.path.join('C:',os.sep,'Users','Python',filename )
###first_script.py#######################
import logging,subprocess
import function_program as log
def main(name):
logger.info(f'First Script line1 : Calling Second Script - {name}')
logger.info(f'First Script line2 : {log.file_path("second_script.py")}')
return_code = subprocess.Popen(['python',f'{log.file_path("second_script.py")}',f'{name}'],universal_newlines=True)
logger.info(f'First Script line3 : return code - {return_code.communicate()[0]}')
if __name__ == '__main__':
logger = log.logfun()
# if logger.hasHandlers(): # if enable handlers - console out is missing few lines
# logger.handlers = []
main('First 1st')
###second_script.py#######################
import sys,logging
import function_program as log
def main(name):
logger.info(f'Second Script line1: {name}')
logger.info(f'Second Script line2 : {log.file_path("second_script.py")}')
if __name__ == '__main__':
logger = log.logfun()
main('Second 2nd')
配置 YAML
version: 1
disable_existing_loggers: False
formatters:
simple:
format: "%(levelname)s %(message)s"
handlers:
console:
class: logging.StreamHandler
level: INFO
formatter: simple
stream: ext://sys.stdout
file_handler:
class: logging.FileHandler
level: INFO
filename: 'log_file.log'
formatter: simple
debug_handler:
class: logging.FileHandler
level: DEBUG
filename: 'debug_file.log'
formatter: simple
loggers:
function_program:
level: DEBUG
handlers: [console,file_handler,debug_handler]
propagate : no
root:
level: INFO
handlers: [file_handler,console,debug_handler]
propagate : no
INFO Main Program line1 : Calling First Script
INFO Main Program line2 : C:\Users\Python\first_script.py
INFO Main script line3 : Return Code -- INFO First Script line1 : Calling Second Script - First 1st
INFO First Script line2 : C:\Users\Python\second_script.py
INFO First Script line3 : return code - INFO Second Script line1: Second 2nd
INFO Second Script line2 : C:\Users\Python\second_script.py
INFO Main Program line1 : Calling First Script
INFO Main Program line2 : C:\Users\Python\first_script.py
INFO First Script line1 : Calling Second Script - First 1st
INFO First Script line2 : C:\Users\Python\second_script.py
INFO Second Script line1: Second 2nd
INFO Second Script line2 : C:\Users\Python\second_script.py
INFO First Script line3 : return code - INFO Second Script line1: Second 2nd
INFO Second Script line2 : C:\Users\Python\second_script.py
INFO Main script line3 : Return Code -- INFO First Script line1 : Calling Second Script - First 1st
INFO First Script line2 : C:\Users\Python\second_script.py
INFO First Script line3 : return code - INFO Second Script line1: Second 2nd
INFO Second Script line2 : C:\Users\Python\second_script.py
INFO Main Program line1 : Calling First Script
INFO Main Program line2 : C:\Users\Python\first_script.py
INFO First Script line1 : Calling Second Script - First 1st
INFO First Script line2 : C:\Users\Python\second_script.py
INFO Second Script line1: Second 2nd
INFO Second Script line2 : C:\Users\Python\second_script.py
INFO First Script line3 : return code - INFO Second Script line1: Second 2nd
INFO Second Script line2 : C:\Users\Python\second_script.py
INFO Main script line3 : Return Code -- INFO First Script line1 : Calling Second Script - First 1st
INFO First Script line2 : C:\Users\Python\second_script.py
INFO First Script line3 : return code - INFO Second Script line1: Second 2nd
INFO Second Script line2 : C:\Users\Python\second_script.py
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)