Я хотел бы иметь:
- a main.log файл со всеми журналами выше уровня DEBUG для захвата из основного и импортированного модулей
- консоль должна отображать только журналы уровня ОШИБКИ из основного и импортированных субмодулей.
- Примечание. Возможно, у меня нет контроля над журналами обработки ошибок импортированных подмодулей.
Вот main.py код для этого:
# main.py importing a submodule
import logging
import submodule
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# log to console
c_handler = logging.StreamHandler()
console_format = logging.Formatter("[%(levelname)s] %(message)s")
c_handler.setFormatter(console_format)
c_handler.setLevel = logging.INFO
logger.addHandler(c_handler)
logger.error("This is an error!!! Logged to console")
# log to file from main
logfile = "./logging/main.log"
f_handler = logging.FileHandler(filename=logfile)
f_format = logging.Formatter("%(asctime)s: %(name)-18s [%(levelname)-8s] %(message)s")
f_handler.setFormatter(f_format)
f_handler.setLevel = logging.DEBUG
logger.addHandler(f_handler)
logger.debug("This is a debug error. Not logged to console, but should log to file")
... и submodule.py код ...
# submodule.py
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(levelname)s:%(name)s:%(message)s')
# log to console
c_handler = logging.StreamHandler()
c_handler.setFormatter(formatter)
logger.addHandler(c_handler)
logger.info("This is an info message from submodule, should be recorded in main.log!")
logger.debug("This is a debug message from submodule, also should be recorded in main.log!!")
Когда я запускаю main.py :
[ERROR] This is an error!!! Logged to console
правильно отображается в консоли - Но ...
- Консоль также показывает ...
INFO:submodule:This is an info message from submodule, should be recorded in main.log!
[DEBUG] This is a debug error. Not logged to console, but should log to file
main.log file
показывает только yy-mm-dd hh:mm:ss: __main__ [DEBUG ] This is a debug error. Not logged to console, but should log to file
. Он не показывает журналы из submodule.py
Оцените знание:
- Куда я иду не так?
- Что потребуется ли исправление кода?
РЕДАКТИРОВАТЬ: На основании @Dan D. предложение изменено submodule.py следующим образом:
# submodule.py
import logging
logger = logging.getLogger(__name__)
def logsomething():
logger.info("This is an info message from submodule, should be recorded in main.log!")
logger.debug("This is a debug message from submodule, also should be recorded in main.log!!")
... и программа записывает в консоль и файл соответственно.
Q. Если я хочу изменить формат сообщения только для submodule.py , это можно сделать через main.py ?