https://docs.djangoproject.com/zh-hans/4.1/topics/logging/

    https://docs.python.org/zh-cn/3/library/logging.html

    https://www.freecodecamp.org/news/logging-in-python-debug-your-django-projects/
    https://betterstack.com/community/guides/logging/how-to-start-logging-with-django/
    以下是一些有用的文章链接,这些文章可以帮助你了解在Django中使用Logging的最佳实践:
    官方文档:Django Logging

    Django Logging Best Practices by Lincoln Loop
    https://lincolnloop.com/blog/django-logging-best-practices/

    How to use Python logging in Django by Vinta Software
    https://www.vinta.com.br/blog/2017/how-use-python-logging-django/

    Django Logging with a Graylog2 backend by Nekmo
    https://blog.nekmo.org/post/django-logging-with-a-graylog2-backend/

    这些链接提供了有关在Django应用程序中配置Logging的信息,包括如何定义Logger和Handler、如何使用过滤器和格式化程序等等。它们还提供了有关如何将Logging输出发送到远程系统(如Graylog)以及如何在Django生产环境中使用Logging的一些提示和技巧。

    希望这些文章能够帮助你在Django应用程序中实现更好的Logging。

    Loggers: 记录器
    Handlers:处理器
    Filters: 过滤器
    Formatters: 格式化器

    Logtail Logtail 是一个开源的日志收集工具,它可以在 Linux、macOS 和 Windows 等多种操作系统上运行。Logtail 可以实时地监控文件的变化并将新增的日志行发送到指定的日志存储后端,例如 Elasticsearch、Logstash、Kafka 等。 Logtail 支持多种日志格式,包括但不限于 JSON、XML、CSV、syslog 等,还可以进行字段解析、正则匹配、日志格式化等操作,方便用户在大量日志中搜索、过滤和分析数据。 Logtail 具有简单易用的命令行界面,用户可以使用命令行参数和配置文件轻松地配置日志收集的目标路径、日志格式、存储后端等参数。

    1. import logging
    2. logger = logging.getLogger(__name__)
    3. logger.info('')

    把所有的日志信息输出到控制台

    1. LOGGING = {
    2. 'version': 1,
    3. 'disable_existing_loggers': False,
    4. 'handlers': {
    5. 'console': {
    6. 'class': 'logging.StreamHandler',
    7. },
    8. },
    9. 'root': {
    10. 'handlers': ['console'],
    11. 'level': 'INFO',
    12. },
    13. }

    这个配置文件包含三个部分:

    1. 版本号:这个配置文件使用的logging模块的版本号。
    2. 处理程序:指定日志消息输出的目的地。在这个配置文件中,只定义了一个处理程序,名为”console”,将日志消息输出到控制台。
    3. 根logger:设置应用程序的默认日志行为。在这个配置文件中,根logger被设置为INFO级别,并将使用上述定义的”console”处理程序来处理所有INFO级别或更高级别的日志消息。

    此外,”disable_existing_loggers”设置为False,这表示禁用已经存在的logger,而不是替换它们的处理程序。

    1. LOGGING = {
    2. 'version': 1,
    3. 'disable_existing_loggers': False,
    4. 'formatters': {
    5. 'verbose': {
    6. 'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
    7. 'style': '{',
    8. },
    9. 'simple': {
    10. 'format': '{levelname} {message}',
    11. 'style': '{',
    12. },
    13. },
    14. 'filters': {
    15. 'special': {
    16. '()': 'project.logging.SpecialFilter',
    17. 'foo': 'bar',
    18. },
    19. 'require_debug_true': {
    20. '()': 'django.utils.log.RequireDebugTrue',
    21. },
    22. },
    23. 'handlers': {
    24. 'console': {
    25. 'level': 'INFO',
    26. 'filters': ['require_debug_true'],
    27. 'class': 'logging.StreamHandler',
    28. 'formatter': 'simple'
    29. },
    30. 'mail_admins': {
    31. 'level': 'ERROR',
    32. 'class': 'django.utils.log.AdminEmailHandler',
    33. 'filters': ['special']
    34. }
    35. },
    36. 'loggers': {
    37. 'django': {
    38. 'handlers': ['console'],
    39. 'propagate': True,
    40. },
    41. 'django.request': {
    42. 'handlers': ['mail_admins'],
    43. 'level': 'ERROR',
    44. 'propagate': False,
    45. },
    46. 'myproject.custom': {
    47. 'handlers': ['console', 'mail_admins'],
    48. 'level': 'INFO',
    49. 'filters': ['special']
    50. }
    51. }
    52. }