StreamHandler - не входить в sys.stdout в контейнере Docker - Python - PullRequest
0 голосов
/ 06 декабря 2018

В моем приложении Python есть RotatingFileHandler и StreamHandler.Это выполняется на сервере Apache в контейнере Docker.Таким образом, я символически связал и доступ к Apache, и журналы ошибок с / dev / stdout, видимым как:

RUN ln -sf /dev/stdout /project/Project_Service/log/access.log && \
    ln -sf /dev/stdout /project/Project_Service/log/error.log

Я установил обработчики как:

app = Flask(__name__)
app.logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(
    "%(asctime)s - %(name)s - %(levelname)s - %(message)s")

file_handler = RotatingFileHandler(app_error,
                                   maxBytes=1024 * 1024 * 100, backupCount=20)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)

stream_handler = logging.StreamHandler(stream=sys.stdout)
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(formatter)

app.logger.addHandler(file_handler)
app.logger.addHandler(stream_handler)
app.logger.debug('DEBUG LOG')
app.logger.info('INFO LOG')
app.logger.warning('WARNING LOG')
app.logger.error('ERROR LOG')
app.logger.critical('CRITICAL LOG')

Если я смотрю нафайл app_error, я могу видеть вывод правильно:

2018-12-06 19:37:46,863 - app - DEBUG - DEBUG LOG
2018-12-06 19:37:46,865 - app - INFO - INFO LOG
2018-12-06 19:37:46,865 - app - WARNING - WARNING LOG
2018-12-06 19:37:46,866 - app - ERROR - ERROR LOG
2018-12-06 19:37:46,868 - app - CRITICAL - CRITICAL LOG

И это видно в журналах докера:

[Thu Dec 06 19:37:46.864764 2018] [:error] [pid 8] 2018-12-06 19:37:46,863 - app - DEBUG - DEBUG LOG
[Thu Dec 06 19:37:46.865872 2018] [:error] [pid 8] 2018-12-06 19:37:46,865 - app - INFO - INFO LOG
[Thu Dec 06 19:37:46.866116 2018] [:error] [pid 8] 2018-12-06 19:37:46,865 - app - WARNING - WARNING LOG
[Thu Dec 06 19:37:46.866370 2018] [:error] [pid 8] [2018-12-06 19:37:46,866] ERROR in app: ERROR LOG
[Thu Dec 06 19:37:46.868450 2018] [:error] [pid 8] 2018-12-06 19:37:46,866 - app - ERROR - ERROR LOG
[Thu Dec 06 19:37:46.870184 2018] [:error] [pid 8] [2018-12-06 19:37:46,868] CRITICAL in app: CRITICAL LOG
[Thu Dec 06 19:37:46.870448 2018] [:error] [pid 8] 2018-12-06 19:37:46,868 - app - CRITICAL - CRITICAL LOG

Что имеет смысл, так как у меня есть оба журнала ошибок, которыеЯ предполагаю, что имеет уровни журнала ошибок и критических, а также обработчик потока.Однако, если я уберу символическую ссылку на журнал ошибок, оба журнала исчезнут.Это как если бы StreamHandler выводил в dev / stderr, хотя я объявил его как sys.stdout в StreamHandler.Я также попытался удалить «поток =», но это ничего не исправило.Я пролил всю документацию и не могу понять, как это исправить.

Я также установил PYTHONUNBUFFERED=0 в переменных окружения.

Любая помощьили направление, которое вы можете предоставить, приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...