В моем приложении 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
в переменных окружения.
Любая помощьили направление, которое вы можете предоставить, приветствуется.