django 自定义日志字段

1.settings.py    MIDDLEWARE  新增中间件  ‘middleware_log.RequestLogMiddleware‘

MIDDLEWARE = [
    ...
    ‘middleware_log.RequestLogMiddleware‘
]

2.settings.py配置  LOGGING

LOGGING = {
    ‘version‘: 1,
    ‘disable_existing_loggers‘: False,
    ‘formatters‘: {
        ‘standard‘: {
            ‘format‘: ‘[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]‘
                      ‘[%(levelname)s][%(message)s]‘
        },
        ‘ops_standard‘: {
            ‘format‘: ‘%(asctime)s %(ip)s user:%(username)s %(filename)s:%(lineno)d %(levelname)s http_reffer:%(‘
                      ‘http_reffer)s path:%(path)s %(message)s ‘
        },
    },
    ‘filters‘: {
        ‘new_add‘: {‘()‘: ‘middleware_log.RequestLogFilter‘},
    },
    ‘handlers‘: {
        #
        ‘default‘: {
            ‘level‘: ‘INFO‘,
            ‘class‘: ‘logging.handlers.TimedRotatingFileHandler‘,
            ‘filename‘: os.path.join(BASE_LOG_DIR, ‘access.log‘),
            ‘backupCount‘: 5,  # 备份数
            ‘formatter‘: ‘ops_standard‘,  # 输出格式
            ‘encoding‘: ‘utf-8‘,  # 设置默认编码,否则打印出来汉字乱码
            ‘filters‘: [‘new_add‘],
            ‘when‘: ‘D‘,
            ‘interval‘: 1,
        },
        ‘error‘: {
            ‘level‘: ‘ERROR‘,
            ‘class‘: ‘logging.handlers.TimedRotatingFileHandler‘,
            ‘filename‘: os.path.join(BASE_LOG_DIR, ‘error.log‘),
            ‘backupCount‘: 5,  # 备份数
            ‘formatter‘: ‘ops_standard‘,  # 输出格式
            ‘encoding‘: ‘utf-8‘,  # 设置默认编码
            ‘filters‘: [‘new_add‘],
            ‘when‘: ‘D‘,
            ‘interval‘: 1,
        },
        ‘console‘: {
            ‘level‘: ‘DEBUG‘,
            ‘class‘: ‘logging.StreamHandler‘,
            ‘formatter‘: ‘standard‘,
        },
        ‘info‘: {
            ‘level‘: ‘INFO‘,
            ‘class‘: ‘logging.handlers.TimedRotatingFileHandler‘,
            ‘filename‘: os.path.join(BASE_LOG_DIR, ‘info.log‘),
            ‘backupCount‘: 5,
            ‘formatter‘: ‘ops_standard‘,
            ‘encoding‘: ‘utf-8‘,  # 设置默认编码
            ‘filters‘: [‘new_add‘],
            ‘when‘: ‘D‘,
            ‘interval‘: 1,
        },
    },
    ‘loggers‘: {
        ‘django‘: {
            ‘handlers‘: [‘console‘, ‘default‘],
            ‘level‘: ‘INFO‘,
            ‘propagate‘: False
        },
        # ‘‘ 调用时需要当作参数传入
        ‘‘: {
            ‘handlers‘: [‘error‘, ‘info‘, ‘default‘],
            ‘level‘: ‘INFO‘,
            ‘propagate‘: True
        },
    }
}

3.项目里新增文件

import threading
import logging

try:
    from django.utils.deprecation import MiddlewareMixin  # Django 1.10.x
except ImportError:
    MiddlewareMixin = object  # Django 1.4.x - Django 1.9.x

local = threading.local()

class RequestLogFilter(logging.Filter):
    """
    日志过滤器,将当前请求线程的request信息保存到日志的record上下文
    record带有formater需要的信息。
    """

    def filter(self, record):
        record.ip = getattr(local, ‘ip‘, None)
        record.username = getattr(local, ‘username‘, None)
        record.http_reffer = getattr(local, ‘http_reffer‘, None)
        record.path = getattr(local, ‘path‘, None)
        return True

class RequestLogMiddleware(MiddlewareMixin):
    """
    将request的信息记录在当前的请求线程上。
    """

    def process_request(self, request):
        temp_meta = request.META
        local.ip = request.META.get(‘HTTP_X_FORWARDED_FOR‘, None)
        local.username = xxx
        local.http_reffer = temp_meta.get(‘HTTP_REFERER‘, None)
        local.path = temp_meta.get(‘PATH_INFO‘, None)

    def process_response(self, request, response):
        return response

4.使用

import logging
LOG  = logging.getLogger()

LOG.info(‘hahahhahaha‘)
LOG.error(‘lalalalala‘)

原文地址:https://www.cnblogs.com/yuzhen0228/p/12015877.html

时间: 2024-10-10 07:57:49

django 自定义日志字段的相关文章

django 开发之自定义日志器

需求 在我们的真实环境中当我们出现错误的时候我们要记录下来,便于我们分析差错. 关于日志的代码文件 1 # 自定义日志输出信息 2 LOGGING = { 3 'version': 1, 4 'disable_existing_loggers': True, 5 'formatters': { 6 'standard': { 7 'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s

【Django】--Model字段

所有字段 AutoField(Field) --int自增列,必须填入参数primary_key=True BigAutoField(AutoField) --bigint自增列,必须填入参数primary_key=True 注意:当model中没有自增列,则自动会创建一个列名为id的列 from django.db import models class UserInfo(models.Model): #自动创建一个列名为id的且为自增的整数列 username = models.CharFi

django 自定义User

django本身的auth_user 只包含了基本的信息包括用户名,密码,邮箱以及注册时间和最新的登录时间,但是这些字段很难满足我们的要求,有时我们想记录用户更多的信息,例如手机号等信息,这时就需要在auth_user 的基础上增加字段,django自定义User网上有四种方法. 1,是官网上推荐的方法,就是增加一个表auth_profile,其中以auth_user 表中的id作为Forgein Key将两个表过关联起来,这样可以在auth_profile 中增加多个用户的信息. 2,另外一种

Django 自定义用户认证

Django 自定义用户认证 Django附带的认证对于大多数常见情况来说已经足够了,但是如何在 Django 中使用自定义的数据表进行用户认证,有一种较为笨蛋的办法就是自定义好数据表后,使用OnetoOne来跟 Django 的表进行关联,类似于这样: from django.contrib.auth.models import User class UserProfile(models.Model): """ 用户账号表 """ user =

ATS配置自定义日志

修改records.config,开启日志自定义功能 更改日志目录,默认日志存放在/var/log/trafficserver: CONFIG proxy.config.log.logfile_dir STRING /var/log/trafficserver 更改默认日志的输出格??式,按照ASCII码输出日志 CONFIG proxy.config.log.squid_log_is_ascii INT 1 关闭squid格式的日志输出 CONFIG proxy.config.log.squi

ValueError: Related model 'myapp.ExUser' cannot be resolved django扩展User字段

扩展字段目前有两种方法: 扩展字段 新建一张表->然后与原有表创建一对一关系 继承django.contrib.auth.models下的AbstractUser类 ,重写User类 两种方式都是官方文档提到的,,实现方法可以在官网以及搜索引擎搜到各大佬的博客上,我今天只分享一下自己遇到的问题及解决方法 我采用的是第2种, 重写User的方法,但是在迁移数据库的时候,遇到问题, 编写好其它表之后,发现User表中字段需要添加于是在models.py 文件中添加了 ExUser类 from dja

Django中常用字段

一.Djiango框架的常用字段 Django ORM 常用字段和参数 常用字段 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. 这

自定义char字段与查询优化与事务

自定义char字段 class MyCharField(models.Field): def __init__(self,max_length,*args,**kwargs): self.max_length = max_length super().__init__(max_length=max_length,*args,**kwargs) def db_type(self, connection): return 'char(%s)'%self.max_length 如果你使用的是djang

第二篇:Django自定义登录功能

目录 自定义登录功能 创建静态文件夹(static文件夹) 静态文件 静态文件夹(static) django静态文件配置 基本配置 静态资源动态绑定 post请求需要修改配置文件 form表单回顾 获取请求方式(request.method) request对象方法 djangoMySQL连接★ django orm简介 字段的增删改查 字段的增 字段的查 字段的改 字段的删 数据的增删改查 查 增 删 改 自定义登录功能 创建静态文件夹(static文件夹) views.py中创建的视图函数