@spbpython

Страница 357 из 785
Vitali K.
05.04.2017
12:12:44
В воркерах у тебя свой логер, который пишет в worker.log, например

Eugene
05.04.2017
12:13:52
Ну да, между процессами логгер не пошарится. Хотя если смотреть multiprocessing, там шарится.

В воркерах у тебя свой логер, который пишет в worker.log, например
Я так и сделал, но этот логгер приходится создавать в модуле, в котором лежат функции для воркера

Vitali K.
05.04.2017
12:14:32
я уверен в multiprocessing тоже просто так ничего не шарится

Google
Vitali K.
05.04.2017
12:14:54
почему бы тебе просто не писать в stderr, зачем тебе логгер?

Eugene
05.04.2017
12:16:02
потому что вся эта байда запускается через сервисы systemd, нет там вывода, а как перенаправить вывод из systemd сервиса я не знаю.

Для планировщика rqscheduler -i 60

Vitali K.
05.04.2017
12:19:08
def main(): logging.basicConfig(stream=sys.stderr, level=logging.INFO, format='%(asctime)s %(levelname)s %(funcName)s %(message)s') queue_name = 'queue_name' logger.info('Starting mail worker for queue=%s', queue_name) logger.info('Connecting to redis=%s', REDIS_HOST) with Connection(get_redis()): worker = Worker(Queue(name=queue_name)) client = Client(RAVEN_CONFIG['dsn'], transport=HTTPTransport) register_sentry(client, worker) worker.work()

можно кастомизировать

Eugene
05.04.2017
12:20:55
я уверен в multiprocessing тоже просто так ничего не шарится
Шарится, попробуй написать простой пример: import multiprocessing as mp import logging logger = logging.getLogger('app') def worker(): logger.info('hello') def main(): p = mp.Process(target=worker) p.start() p.join() if __name__ == '__main__': main()

Дмитрий Нан
05.04.2017
12:21:41
Тактика "наскоком" не работает как правило

Eugene
05.04.2017
12:22:22
Тактика "наскоком" не работает как правило
Я не занимался веб разработкой, а так уже 9 лет в питоне :)

Дмитрий Нан
05.04.2017
12:22:42
странно тогда слышать про непонятки с логером

Google
Дмитрий Нан
05.04.2017
12:22:51
логер не шарится

просто у логера в ином процессе такие же настройки

что создает ощущение шаринга

Eugene
05.04.2017
12:23:45
как думаешь через какой механизм это шарится?
Ты имеешь в виду сериализацию или что? В multiprocessing стандартный pickle используется

Дмитрий Нан
05.04.2017
12:24:31
для чистого шаринга нужны такие объекты , как mp.Array, mp.Value т.п

Eugene
05.04.2017
12:24:34
Дмитрий Нан
05.04.2017
12:24:40
я имею ввиду , что во втором процессе - копия

Eugene
05.04.2017
12:24:47
Я знаю

Eugene
05.04.2017
12:25:31
В случае с rq, где вообще отдельный процесс, я понял, что о логгере уже ничего не известно

Дмитрий Нан
05.04.2017
12:25:53
да как неизвестно, все ок там)

Дмитрий Нан
05.04.2017
12:26:28
Я знаю, но тут выхода нет
ну тут тогда только страдать и жрать кактус)

вообще надо твой код смотреть

а не сообщения читать)

Vitali K.
05.04.2017
12:27:19
В Rq это не просто отдельный процесс, а N процессов

Eugene
05.04.2017
12:27:47
в multiprocessing тоже отдельный процесс
Ага, только он полностью скопирован же и логгер там - эт окопия.

Vitali K.
05.04.2017
12:28:14
rq worker запускает процесс, который ждет тасок. как только появляется таска, то форкается потомок для выполнения

Google
Eugene
05.04.2017
12:30:58
Да, я, похоже, реально не понимаю как работают логгеры во всём этом окружении. Допустим, почему логгер из пакета requests выводит свои сообщения в лог uwsgi сервера, а логгер из Flask нет?

Дмитрий Нан
05.04.2017
12:31:11
ясен перец у тебя в одном процессе , где она есть лог будет делать вывод, в другом, в котором нету инициализации - не будет

так надо везде делать

ты делай вызовы requests в какой то свой модуль и не сделай инициализацию - вывода не будет

вообще кури систему логировнаия

ноги оттуда растут

ну или выкладывай весь код

Eugene
05.04.2017
12:33:37
Ага, а то сейчас получается, что есть несколько пакетов, в кажом есть логгирование, а все вместе они работают по-разному. В идеале, для меня, было бы если бы все логи стекались в одно место.

Vitali K.
05.04.2017
12:34:46
Кто-то говорил что неплохо было бы если бы сделали доклад по логированию)

Eugene
05.04.2017
12:35:34
Вот да! Я бы послушал :) Всегда полезно учиться

Дмитрий Нан
05.04.2017
12:35:38
человек хочет , чтоб все по шелчку взлетело, нежели за 9 лет опыта нельзя осознать обратное

Eugene
05.04.2017
12:36:11
человек хочет , чтоб все по шелчку взлетело, нежели за 9 лет опыта нельзя осознать обратное
Нет, я хочу разобраться, чтобы понимать, что именно происходит.

Дмитрий Нан
05.04.2017
12:36:14
что желание захерачить по быстрому ведет к одному - боли и страданию)

ну тогда только выкладывание кода

либо самому исследовать вопрос

Eugene
05.04.2017
12:37:55
Вот ты тоже опытный, ты можешь объяснить понятным языком, почему по умочланию, логи из requests идут в лог, который задан в настройках uwsgi, а логи из flask нет?

Google
Дмитрий Нан
05.04.2017
12:38:20
по коду скажу

Eugene
05.04.2017
12:38:24
Это если вообще ничего не трогать и не настраивать явно.

Дмитрий Нан
05.04.2017
12:39:20
и по настрйокам

и еще за денежку))))

шучу

Eugene
05.04.2017
12:41:02
Значит requests делает внутри себя "какую-то магию", в смысле сам определяет, куда писать?

Vitali K.
05.04.2017
12:41:12
Ну да

Дмитрий Нан
05.04.2017
12:41:42
нет никакой блин магии, хорош вам

Admin
ERROR: S client not available

Дмитрий Нан
05.04.2017
12:41:54
человек хочет конкретику, при этом не пишет сам конкретику

почитай как на stackovrflow посты оформляют блин

Vitali K.
05.04.2017
12:42:09
Ну оно магия когда не знаешь что под капотом

Eugene
05.04.2017
12:42:15
магия - это то, что скрыто :)

Дмитрий Нан
05.04.2017
12:42:28
ок

Vitali K.
05.04.2017
12:42:36
Можно открыть исходники requests и посмотреть что там

Eugene
05.04.2017
12:43:31
Явное лучше неявного, кто там говорил? :)

Vitali K.
05.04.2017
12:43:34
По моему у логеров есть ещё иерархии и признак propagate, который говорит отправлять ли сообщение выше

Eugene
05.04.2017
12:44:07
Ага, propagate отправляет сообщение по всей иерархии логгеров

Google
Eugene
05.04.2017
12:45:19
Иерархии работают в рамках одного пакета же, ну там, например mod1.mod2.mod3, а когда у нас несколько пакетов - это уже отдельные логгеры, по сути ансамбли логгеров и у каждого свои настройки.

Короче, я всё же разберусь с этой петрушкой и напишу, что получилось :)

В смысле, что именно происходит у меня в приложении.

Дмитрий Нан
05.04.2017
12:49:06
странные 9 лет опыта питона конечно

у меня ест друг , он знает 21 язык программирования

Eugene
05.04.2017
12:50:07
странные 9 лет опыта питона конечно
Наверное. Но с логгерами всё не так просто как кажется на первый взгляд.

Дмитрий Нан
05.04.2017
12:50:29
логирование вообще одна из базовых вещей не только в питоне

не такой он и сложный

Dmitry
05.04.2017
12:50:50
Vitali K.
05.04.2017
12:51:01
?

Дмитрий Нан
05.04.2017
12:51:02
в его системе счисления видимо да)))

Dmitry
05.04.2017
12:51:08
лол)

Дмитрий Нан
05.04.2017
12:51:34
причем лет ему 25

с 4х лет по году на язык

норм

я просто завидую....

Eugene
05.04.2017
12:52:04
Дмитрий Нан
05.04.2017
12:52:15
Sergey
05.04.2017
12:52:15
а python 2.7 и 3.6 это разные?
Ага, а ещё 3.0, 3.1, 3.2, 3.3, 3.4 и 3.5 — все разные :D

Eugene
05.04.2017
12:52:33
брррр
Мерзкая хрень как и programm_options, но оно работает :)

Дмитрий Нан
05.04.2017
12:52:35
запахло плюсами, удаляюсь...

Страница 357 из 785