2016-01-01 3 views
0

У меня есть python main, который использует различные подмодули пользователей. структура такова:Python logging - исключая подмодуль

root:. 
│ main.py 
│ 
└───MyModule 
     file1.py 
     file2.py 
     special.py 

MyModule выводит некоторые важные журналы (каждый файл делает регистратор = logging.getLogger (имя)). Однако - журналы «special.py» необходимо хранить отдельно.

я пытаю:

MyModuleHandler = logging.handlers.RotatingFileHandler('MyModule.log', maxBytes= 5000000, backupCount=5) 
MyModuleHandler.setFormatter(formatter) 
MyModuleHandler.setLevel(logging.DEBUG) 


specialHandler = logging.handlers.RotatingFileHandler('special.log', maxBytes= 5000000, backupCount=5) 
specialHandler.setFormatter(formatter) 
specialHandler.setLevel(logging.INFO) 

console = logging.StreamHandler() 
console.setLevel(logging.INFO) 
console.setFormatter(formatter) 

logging.getLogger('MyModule.special').setLevel(logging.DEBUG) 
logging.getLogger('MyModule.special').addHandler(specialHandler) 

logging.getLogger('MyModule').addHandler(console) 
logging.getLogger('MyModule').setLevel(logging.DEBUG) 
logging.getLogger('MyModule').addHandler(MyModuleHandler) 

ребята, что я делаю не так?

ответ

1

OK. Это было действительно глупо Все, что мне было нужно, это установить поле распространения в указанном логере.

правильный код должен быть:

MyModuleHandler = logging.handlers.RotatingFileHandler('MyModule.log', maxBytes= 5000000, backupCount=5) 
MyModuleHandler.setFormatter(formatter) 
MyModuleHandler.setLevel(logging.DEBUG) 


specialHandler = logging.handlers.RotatingFileHandler('special.log', maxBytes= 5000000, backupCount=5) 
specialHandler.setFormatter(formatter) 
specialHandler.setLevel(logging.INFO) 

console = logging.StreamHandler() 
console.setLevel(logging.INFO) 
console.setFormatter(formatter) 

logging.getLogger('MyModule.special').setLevel(logging.DEBUG) 
logging.getLogger('MyModule.special').addHandler(specialHandler) 
logging.getLogger('MyModule.special').propagate = False 

logging.getLogger('MyModule').addHandler(console) 
logging.getLogger('MyModule').setLevel(logging.DEBUG) 
logging.getLogger('MyModule').addHandler(MyModuleHandler)