Несмотря на то, что это возможный дубликат, я хочу написать крошечный бит знания ведения журнала на питоне.
НЕ пропускайте лесорубы. Вы всегда можете получить доступ к любому логгеру на logging.getLogger(<log name as string>)
. По умолчанию это выглядит так: * flask использует имя, которое вы предоставляете классу Flask
.
Итак, если ваш основной модуль называется 'my_tool', вы должны сделать logger = logging.getLogger('my_tool')
в модуле Service
.
Чтобы добавить это, я хотел бы указать на то, что я назвал свои регистраторы и пакеты, поэтому я бы сделал Flask('my_tool')
** и в других модулях. logger = logging.getLogger('my_tool.services')
, что все используют один и тот же корневой журнал (и обработчики).
* Опыт нет, основываясь на другом ответе.
** Опять же, не использовать флягу, дк, если это хорошая практика
Edit: Супер простой глупый пример
Главная Колба приложение
import sys
import logging
import flask
from module2 import hi
app = flask.Flask('tester')
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
app.logger.addHandler(handler)
app.logger.setLevel(logging.DEBUG)
@app.route("/index")
def index():
app.logger.debug("TESTING!")
hi()
return "hi"
if __name__ == '__main__':
app.run()
module2
import logging
log = logging.getLogger('tester.sub')
def hi():
log.warning('warning test')
Выходы
127.0.0.1 - - [04/Oct/2016 20:08:29] "GET /index HTTP/1.1" 200 -
2016-10-04 20:08:29,098 - tester - DEBUG - TESTING!
2016-10-04 20:08:29,098 - tester.sub - WARNING - warning test
Edit 2: Мессинг с subloggers
Полностью ненужными, просто для общего знания.
Определив дочерний регистратор, выполнив добавление .something
после имени корневого регистратора в logging.getLogger('root.something')
, он дает вам базовое другое пространство имен для работы.
Мне лично нравится использовать его для группировки функций при регистрации. Поэтому у вас есть .tool
или .db
, чтобы узнать, какой тип кода регистрируется. Но это также позволяет так, что у этих дочерних регистраторов могут быть свои собственные обработчики.Поэтому, если вы хотите, чтобы часть вашего кода печаталась до stderr
, или в журнал, вы можете это сделать. Вот пример с измененным module2
.
module2
import logging
import sys
log = logging.getLogger('tester.sub')
handler = logging.StreamHandler(sys.stderr)
handler.setFormatter(logging.Formatter('%(name)s - %(levelname)s - %(message)s'))
log.addHandler(handler)
log.setLevel(logging.INFO)
def hi():
log.warning("test")
Выход
127.0.0.1 - - [04/Oct/2016 20:23:18] "GET /index HTTP/1.1" 200 -
2016-10-04 20:23:18,354 - tester - DEBUG - TESTING!
tester.sub - WARNING - test
2016-10-04 20:23:18,354 - tester.sub - WARNING - test
возможно дубликат http://stackoverflow.com/questions/22944387/configure-module-logger-to-flask-app-logger – CasualDemon
Я видел этот вопрос, но ответ очень низок и не имеет для меня никакого смысла. – user4184113