Асинхронное ведение журнала в Django

#python #django

#python #django

Вопрос:

Я создал простое веб-приложение погоды в Django, используя API. Ведение журнала включено и записывается в файлы в Windows. Я хочу, чтобы ведение журнала было асинхронным, то есть в конце выполнения. Как мы можем выполнить асинхронное ведение журнала в Django?

Комментарии:

1. Что это at the end of execution значит? Приведите пример.

2. В конце выполнения вызова api

3. то есть после отображения представления пользователю запись журнала в файл журнала. В настоящее время он записывает журнал в обычном режиме, поскольку ведение журнала работает

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

5. как это использовать?

Ответ №1:

Мы можем создавать асинхронные представления только в Django. Существует пакет Python Logstash, который имеет асинхронный способ ведения журнала, но он хранит журналы в базе данных в удаленном экземпляре. (Альтернативой этому является хранение журналов в SQLLite3 db). Опция ведения журнала файлов в нем отсутствует.

Более того, async является новичком в Django, и в нем все еще остается много нерешенных сложностей. Это может привести к перегрузке памяти, что может привести к снижению производительности. Пожалуйста, найдите несколько ссылок ниже для справки.

https://pypi.org/project/python-logstash/
https://docs.djangoproject.com/en/3.1/topics/async/#:~:text=New in Django 3.0.,have efficient long-running requests.
https://deepsource.io/blog/django-async-support/

Ответ №2:

вы можете использовать logging модуль из стандартной библиотеки python

 import logging

logger = logging.getLogger(__name__)

# Set file as output
handler = logging.StreamHandler()
# Formatter template
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
# add a formatter to handler
handler.setFormatter(formatter)
# add a handler to logger
logger.addHandler(handler)

# your messages will be added to the file
logger.error("it's error message")
logger.info("it's info message")
logger.warning("it's warning message")
 

Официальная документация: https://docs.python.org/3/library/logging.html

Надеюсь, я вам помог!)

Комментарии:

1. Этот код будет записывать журналы в файл, работая как print функция

2. да, он просто записывает журналы в файл, который я уже сделал. Но я хочу, чтобы журналы записывались в файл в конце, то есть после отображения представления, определенного в views.py досье.

3. вы хотите, чтобы весь поток django был записан в файл?

Ответ №3:

Я могу посоветовать вам начать проект django следующим образом. Минусы: ничего не будет выводиться на консоль, но это будет работать быстрее, чем в промежуточном программном обеспечении

 nohup python manage.py runserver > file.log