精华内容
下载资源
问答
  • django日志

    2019-06-25 13:32:47
    django日志 日志框架的组成元素 logger: 日志系统的入口,可以配置 日志级别 Handlers 过滤器 Formatters 1.Loggers logger是日志的系统的入口,可以配置日志级别(日志级别:描述该logger处理的消息的严重性) ​ ...

    django日志

    日志框架的组成元素

    logger: 日志系统的入口,可以配置 日志级别

    Handlers

    过滤器

    Formatters

    1.Loggers

    logger是日志的系统的入口,可以配置日志级别(日志级别:描述该logger处理的消息的严重性)

    ​ 日志级别:

    1.DEBUG:排查故障时使用的低级别系统信息
    2.INFO:一般的系统信息
    3.WARNING:描述系统发生了一些小问题的信息
    4.ERROR:描述系统发生了大问题的信息
    5.CRITICAL:描述系统发生严重问题的信息
    

    每一条写入 logger 的消息都是一条日志记录。每一条日志记录也包含日志级别,代表对应消息的严重程度。

    当 logger 处理一条消息时,会将自己的日志级别和这条消息的日志级别做对比。如果消息的日志级别匹配或者高于 logger 的日志级别,它就会被进一步处理。否则这条消息就会被忽略掉。

    当 logger 确定了一条消息需要处理之后,会把它传给 Handler

    2.Handlers

    Handlers是决定如何处理logger中每一条消息的引擎。它描述特定的日志行为,比如把消息输出到屏幕、文件或网络 socket。

    handler 也有日志级别的概念。如果一条日志记录的级别不匹配或者低于 handler 的日志级别,对应的消息会被 handler 忽略。

    一个 logger 可以有多个 handler,每一个 handler 可以有不同的日志级别。这样就可以根据消息的重要性不同,来提供不同格式的输出

    3.过滤器

    在日志记录从 logger 传到 handler 的过程中,使用 Filter 来做额外的控制。

    默认情况下,只要级别匹配,任何日志消息都会被处理。不过,也可以通过添加 filter 来给日志处理的过程增加额外条件。例如,可以添加一个 filter 只允许某个特定来源的 ERROR 消息输出。

    Filter 还被用来在日志输出之前对日志记录做修改。例如,可以写一个 filter,当满足一定条件时,把日志记录从 ERROR 降到 WARNING 级别。

    Filter 在 logger 和 handler 中都可以添加;多个 filter 可以链接起来使用,来做多重过滤操作。

    4.Formatters

    日志记录最终是需要以文本来呈现的。Formatter 描述了文本的格式。一个 formatter 通常由包含 :ref:](https://docs.djangoproject.com/zh-hans/2.1/topics/logging/#id1)LogRecord attributes [python:logrecord-attributes 的 Python 格式化字符串组成,不过你也可以为特定的格式来配置自定义的 formatter。

    模块日志的配置

    1.disable_existing_loggers

    默认就是Ture,那么默认配置中的logger全部被禁用。被禁用的logger并不是被删除了,它们仍然存在,只是静默地丢弃所有发来的日志请求,甚至不会传播给上级logger

    2
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': { # 日志信息显示的格式
            'verbose': {
                'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
                'style': '{',
            },
            'simple': {
                'format': '{levelname} {message}',
                'style': '{',
            },
        },
        'filters': {
            'special': {
                '()': 'project.logging.SpecialFilter',
                'foo': 'bar',
            },
            'require_debug_true': {
                '()': 'django.utils.log.RequireDebugTrue',# django在debug模式下才输出日志
            },
        },
        'handlers': {
            'console': {
                'level': 'INFO',
                'filters': ['require_debug_true'],
                'class': 'logging.StreamHandler',
                'formatter': 'simple'
            },
            'mail_admins': {
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler',
                'filters': ['special']
            }
        },
        'loggers': {
            'django': {
                'handlers': ['console'],
                'propagate': True,#是否继续传递日志信息
            },
            'django.request': {
                'handlers': ['mail_admins'],
                'level': 'ERROR',
                'propagate': False,
            },
            'myproject.custom': {
                'handlers': ['console', 'mail_admins'],
                'level': 'INFO',
                'filters': ['special']
            }
        }
    }
    

    此日志记录配置执行以下操作:

    • 将配置标识为“dictConfig版本1”格式。目前,这是唯一的dictConfig格式版本。

    • 定义两个格式化程序:

      • simple,只输出日志级别名称(例如 DEBUG)和日志消息。

        format字符串是一个普通的Python格式化字符串,用于描述要在每个日志记录行上输出的详细信息。可以输出的完整详细列表可以在Formatter Objects中找到。

      • verbose,输出日志级别名称,日志消息,以及生成日志消息的时间,进程,线程和模块。

    • 定义两个过滤器:

      • project.logging.SpecialFilter,使用别名special。如果此过滤器需要其他参数,则可以在过滤器配置字典中将它们作为附加键提供。在这种情况下,参数 foo将被赋予bar实例化时 的值SpecialFilter
      • django.utils.log.RequireDebugTrue,其传递记录时 DEBUGTrue
    • 定义两个处理程序:

      • console,a StreamHandler,打印任何INFO (或更高)消息sys.stderr。此处理程序使用simple输出格式。
      • mail_admins,an AdminEmailHandler,将任何ERROR (或更高)消息通过电子邮件发送到网站ADMINS。此处理程序使用 special过滤器。
    • 配置三个记录器:

      • django,将所有消息传递给console处理程序。
      • django.request,将所有ERROR消息传递给mail_admins处理程序。此外,此记录器标记为传播消息。这意味着写入的日志消息django.request将不会被django记录器处理。
      • myproject.custom,它传递所有INFO 或更高的消息,也将special过滤器传递给两个处理程序 - console,和mail_admins。这意味着所有INFO级别的消息(或更高级别)将被打印到控制台; ERRORCRITICAL 消息也将通过电子邮件输出。
    展开全文
  • Django 日志

    2019-08-09 18:15:38
    Django 日志 阅读:10633评论:7 Django使用Python内置的logging模块实现它自己的日志系统。 如果你没有使用过logging模块,请参考Python教程中的相关章节。 直达链接《logging模块详解》。 在Python的logging...

    Django 日志

    阅读: 10633     评论:7


    Django使用Python内置的logging模块实现它自己的日志系统。

    如果你没有使用过logging模块,请参考Python教程中的相关章节。

    直达链接《logging模块详解》

    在Python的logging模块中,主要包含下面四大金刚:

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

    下文假定你已经对logging模块有一定的了解。否则,可能真的像看天书......

    一、在Django视图中使用logging

    使用方法非常简单,如下例所示:

    # 导入logging库
    import logging
    
    # 获取一个logger对象
    logger = logging.getLogger(__name__)
    
    def my_view(request, arg1, arg):
        ...
        if bad_mojo:
            # 记录一个错误日志
            logger.error('Something went wrong!')
    

    每满足bad_mojo条件一次,就写入一条错误日志。

    实际上,logger对象有下面几个常用内置方法:

    • logger.debug()
    • logger.info()
    • logger.warning()
    • logger.error()
    • logger.critical()

    二、在Django中配置logging

    通常,只是像上面的例子那样简单的使用logging模块是远远不够的,我们一般都要对logging的四大金刚进行一定的配置。

    Python的logging模块提供了好几种配置方式。默认情况下,Django使用dictConfig format。也就是字典方式。

    例一:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'file': {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': '/path/to/django/debug.log',
            },
        },
        'loggers': {
            'django': {
                'handlers': ['file'],
                'level': 'DEBUG',
                'propagate': True,
            },
        },
    }
    

    如果你使用上面的样例,请确保Django用户对'filename'对应目录和文件的写入权限。

    例二:

    下面这个示例配置,让Django将日志打印到控制台,通常用做开发期间的信息展示。

    import os
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            'django': {
                'handlers': ['console'],
                'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
            },
        },
    }
    

    例三:

    下面是一个相当复杂的logging配置:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
            },
            'simple': {
                'format': '%(levelname)s %(message)s'
            },
        },
        'filters': {
            'special': {
                '()': 'project.logging.SpecialFilter',
                'foo': 'bar',
            },
            'require_debug_true': {
                '()': 'django.utils.log.RequireDebugTrue',
            },
        },
        'handlers': {
            'console': {
                'level': 'INFO',
                'filters': ['require_debug_true'],
                'class': 'logging.StreamHandler',
                'formatter': 'simple'
            },
            'mail_admins': {
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler',
                'filters': ['special']
            }
        },
        'loggers': {
            'django': {
                'handlers': ['console'],
                'propagate': True,
            },
            'django.request': {
                'handlers': ['mail_admins'],
                'level': 'ERROR',
                'propagate': False,
            },
            'myproject.custom': {
                'handlers': ['console', 'mail_admins'],
                'level': 'INFO',
                'filters': ['special']
            }
        }
    }
    

    上面的logging配置主要定义了这么几件事情:

    • 定义了配置文件的版本,当前版本号为1.0

    • 定义了两个formatter:simple和format,分别表示两种文本格式。

    • 定义了两个过滤器:SpecialFilter和RequireDebugTrue

    • 定义了两个处理器:console和mail_admins
    • 配置了三个logger:'django'、'django.request'和'myproject.custom'

    三、Django对logging模块的扩展

    Django对logging模块进行了一定的扩展,用来满足Web服务器专门的日志记录需求。

    1. 记录器 Loggers

    Django额外提供了几个其内建的logger。

    • django: 不要使用这个记录器,用下面的。这是一个被供起来的记录器,^-^
    • django.request: 记录与处理请求相关的消息。5XX错误被记录为ERROR消息;4XX错误记录为WARNING消息。接收额外参数:status_code和request
    • django.server: 记录开发服务器下处理请求相关的消息。只用于开发阶段。
    • django.template: 记录与渲染模板相关的日志。
    • django.db.backends: 与数据库交互的代码相关的消息。
    • django.security: 记录任何与安全相关的错误。
    • django.security.csrf: 记录CSRF验证失败日志。
    • django.db.backends.schema: 记录查询导致数据库修改的日志。

    2. 处理器 Handlers

    Django额外提供了一个handler,AdminEmailHandler。这个处理器将它收到的每个日志信息用邮件发送给站点管理员。

    3. 过滤器Filters

    Django还额外提供两个过滤器。

    • CallbackFilter(callback)[source]:这个过滤器接受一个回调函数,并对每个传递给过滤器的记录调用它。如果回调函数返回False,将不会进行记录的处理。

    • RequireDebugFalse[source]: 这个过滤器只会在settings.DEBUG==False时传递。

    四、总结

    总体而言,在Django中使用logging和在普通Python程序中,区别不大。

    展开全文
  • Django日志

    2019-03-21 18:55:38
    Django日志使用了python的logging模块,需要在settings中进行配置 logging模块由四部分组成 记录器 记录器配置具有日志级别。此日志级别描述了记录器将处理的消息的严重性。Python定义了以下日志级别: DEBUG: ...

    logging模块

    Django的日志使用了python的logging模块,需要在settings中进行配置
    logging模块由四部分组成

    • 记录器
      记录器配置具有日志级别。此日志级别描述了记录器将处理的消息的严重性。Python定义了以下日志级别:
      DEBUG: 用于调试目的的低级系统信息
      INFO: 一般系统信息
      WARNING: 描述已发生的小问题的信息。
      ERROR: 描述已发生的主要问题的信息。
      CRITICAL: 描述已发生的严重问题的信息

    • 处理器
      处理器是确定记录器中每条消息发生情况的引擎。它描述了特定的日志记录行为,例如将消息写入屏幕,文件或网络套接字。

      与记录器一样,处理器也具有日志级别。如果日志记录的日志级别未达到或超过处理程序的级别,则处理程序将忽略该消息。

      记录器可以有多个处理器,每个处理器可以具有不同的日志级别。以这种方式,可以根据消息的重要性提供不同形式的通知。

    • 过滤器
      过滤器用于提供对日志记录从记录器传递到处理程序的附加控制。

      默认情况下,将处理满足日志级别要求的任何日志消息。但是,通过安装筛选器,可以在日志记录过程中添加其他条件。例如,您可以安装仅允许ERROR发出来自特定源的消息的过滤器。

      过滤器还可用于在发出之前修改日志记录。例如,如果满足一组特定条件,您可以编写一个过滤器,将ERROR日志记录降级 为WARNING记录。

      过滤器可以安装在记录器或处理器上; 可以在链中使用多个过滤器来执行多个过滤操作。

    • 格式化程序
      最终,日志记录需要呈现为文本。格式化程序描述该文本的确切格式。格式化程序通常由包含LogRecord属性的Python格式化字符串组成 ; 但是,也可以编写自定义格式化程序来实现特定的格式化行为。

    示例

    • 配置
      LOG_PATH = 'xx/xx/'
      LOGGING = {
          'version': 1,   #定义了配置文件的版本
          'disable_existing_loggers': False,  ## True表示禁用logger
          # 格式化
          'formatters': {
              'default': {
                  'format': '%(levelname)s %(asctime)s %(module)s %(funcName)s %(msecs)s %(message)s'
                  },
              'simple': {
                  'format': '%(levelname)s %(message)s'
                  },
              },
           # 处理日志的方式
          'handlers': {
              'v_handlers': {
                  # 级别
                  'level': 'DEBUG',
                  # 存储方式
                  "class": 'logging.handlers.RotatingFileHandler',
                  # 日志文件大小
                  'maxBytes': 5 * 1024,
                  'encoding': 'utf8',
                  # 日志文件路径
                  'filename': '{}salary_all.log'.format(LOG_PATH),
                  # 格式化方式
                  'formatter': 'default',
                  },
              'error': {
                  'level': "ERROR",
                  'class': 'logging.handlers.RotatingFileHandler',
                  'maxBytes': 5 * 1024,
                  'encoding': 'utf8',
                  'filename': '{}salary_error.log'.format(LOG_PATH),
                  'formatter': 'simple'
                  }
              },
           # 配置日志的处理方式
          'loggers': {
              'django': {
                  'handlers': ['v_handlers'],
                  'propagate': True,
                  },
              'django.request': {
                  'handlers': ['error'],
                  'level': 'ERROR',
                  'propagate': True
                  }
      
              },
           # 过滤器
          'filters': {
      
              }
          }
      
      
    • format
      format
      %(levelno)s 日志的级别数字形式
      %(levelname)s 日志级别的名称
      %(pathname)s 当前执行程序的路径
      %(filename)s 当前执行程序名
      %(funcName)s 当前的函数
      %(lineno)d 记录日志的当前行号
      %(asctime)s 日期时间
      %(msecs)s 毫秒级的时间
      %(thread)d 线程ID
      %(threadName)s 线程名称
      %(process)d 进程ID
      %(message)s 记录的日志信息

    本文链接:时光不写博客-Django日志

    展开全文
  • Django使用uwsgi部署时的配置以及django日志文件的处理方法首先保证你有一个可运行的django工程然后在虚拟环境里面安装好uwsgipip install uwsgi配置nginx的服务如下server {listen 80 default_server;listen [::]:...

    Django使用uwsgi部署时的配置以及django日志文件的处理方法

    首先保证你有一个可运行的django工程

    然后在虚拟环境里面安装好uwsgi

    pip install uwsgi

    配置nginx的服务如下

    server {

    listen 80 default_server;

    listen [::]:80 default_server;

    root /var/www/html;

    server_name _;

    location / {

    try_files $uri $uri/ =404;

    }

    location /account {

    include uwsgi_params; #表示使用uwsgi代理

    uwsgi_pass 127.0.0.1:8000; #这里配置的必须和uwsgi里的一致

    }

    }

    这里需要注意的是,nginx中的 location /account 要和你在django中的地址一致,即django 和nginx是可以找到的路由

    先在脚本中测试使用简单命令启动服务

    uwsgi --socket 127.0.0.1:8000 --wsgi-file yourproject/wsgi.py

    注意:这里的yourproject 用你自己的目录替换

    如果能走到这儿,可以正常运行,那么就是成功的,否则自己查看控制台中输出的错误信息,然后对应的去修改。

    最后是写入到配置文件的运行方式,新建一个test.ini 文件

    [uwsgi]

    #监听的地址 必须和nginx中的一致

    socket = 127.0.0.1:8000

    #wsgi文件,在你的项目配置目录下可以找到 注意:最后输入绝对地址

    wsgi-file = /home/aeasringnar/my_Project/jwt-test/my_jwt_test/wsgi.py

    # 你的项目的根目录 绝对地址

    chdir = /home/aeasringnar/my_Project/jwt-test

    # 你项目使用的虚拟环境的根目录 绝对地址

    home = /home/aeasringnar/.envs/jwt-test

    #你的日志目录,注意的是,你的django控制台输出的日志都会在这里输出,uwsgi的相关日志也在这里

    daemonize = /home/aeasringnar/my_Project/jwt-test/test.log

    ####下面的配置可以有 也可以没有,看个人需求,不建议配置

    # 主进程

    master = true

    # 多站模式

    vhost = true

    # 多站模式时不设置入口模块和文件

    no-site = true

    # 子进程数

    workers = 2

    # 退出、重启时清理文件

    vacuum = true

    然后启动

    uwsgi --ini test.ini

    uwsgi test.ini

    启动后会输出

    [uWSGI] getting INI configuration from test.ini

    这时候再去访问查看是否启动成功

    如果服务挂了,去日志文件查看

    这里需要查看端口使用情况

    附:相关命令Linux环境下

    查看已经连接的服务端口(ESTABLISHED)

    netstat -a

    查看所有的服务端口(LISTEN,ESTABLISHED)

    netstat -ap

    查看指定端口,可以结合grep命令:

    netstat -ap | grep 8000

    也可以使用lsof命令:

    lsof -i:8000 #可以查看对应的PID

    若要关闭使用这个端口的程序,使用kill + 对应的pid

    kill -9 PID号

    本例小窍门:关闭所有uwsgi进程命令

    killall -9 uwsgi

    以上这篇Django使用uwsgi部署时的配置以及django日志文件的处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

    以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

    展开全文
  • 【Django系列】Django日志配置
  • 1.django日志bug:在我启动django项目的时候报错如下,这个错误很奇葩,找不到/usr/local/InfosecTestPlatform/libs/Log/Log_collect.log.这不是我们项目的日志文件么?这里为什么会出错,莫名其妙.[root@localhost ...
  • Django日志

    2020-02-17 23:46:45
    Django日志器配置 django默认去搜寻配置文件中的名为django的日志器,如果没有,就用自带的格式输出到控制台,如果有就按照配置的格式输出。如果想要自定义日志格式比如获取用户ip,用户传来的参数等等,可以再...
  • Django日志配置

    2017-10-13 16:47:16
    django日志模块配置及使用
  • 今天小编就为大家分享一篇Django使用uwsgi部署时的配置以及django日志文件的处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 下载后通过pip安装,在django项目settings的installed app中注册,在logging中class设置为handlers.handlers.DatabaseHandler,配置数据库host、user、password、db即可。django日志即自动写入配置的数据库中。
  • 主要介绍了Django日志及中间件模块应用案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常。在生产环境下有很大的用处。...下面这篇文章主要介绍了Django日志模块logging的相关资料,需要的朋友可以参考下。
  • django 日志配置

    2018-07-30 21:11:00
    django 日志配置 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': '%(levelname)s %(asctime)s %(pathname)s %(filename)s %(funcName)s %(lineno)d: %...
  • django 日志 四大块,格式器,过滤器,处理器,日志管理器 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': {# 日志格式 'standard': { 'format': '%(asctime)s [%(threa...
  • 今天小编就为大家分享一篇Django 日志配置按日期滚动的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,059
精华内容 823
关键字:

django日志