>  기사  >  Java  >  Django 로그 모듈 로깅 구성에 대한 자세한 설명

Django 로그 모듈 로깅 구성에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-02-16 17:01:021405검색

로그는 프로그램 개발에 없어서는 안 될 필수 요소입니다. 로그를 통해 어디에 오류가 있는지, 어떤 이상이 있는지 분석할 수 있습니다. 프로덕션 환경에서 매우 유용합니다. Java 개발에서는 일반적으로 log4j 및 logback과 같은 타사 구성 요소가 사용됩니다. 다음 글에서는 Django 로그 모듈 로깅 관련 정보를 주로 소개합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

서문

Django는 로그 출력 정보에 있어서 요청 정보, 설정 구성, 트랙백 정보가 모두 제공되므로 충분합니다. 디버그. 그러나 온라인 환경에서 사용자가 이 정보를 볼 수 있도록 허용하면 매우 안전하지 않습니다(코드가 노출됨). 따라서 온라인 디버그를 꺼야 하지만 디버깅 정보를 버릴 수는 없습니다. 이를 위해서는 로깅 모듈을 사용해야 합니다.

로깅 모듈은 실제로 Python 모듈이며 Django에서 많은 현지화 지원을 제공합니다.

로거의 이해

우선 로깅 작업에는 크게 포맷터, 필터, 프로세서 핸들러 4가지가 있습니다. .로그 인스턴스 로거.

처리 흐름

   formatter
logger ----> handler ----------------> files, emails
    filter

처리 흐름은 이렇습니다. 첫째, 코드에서. 우리가 얻는 것은 로거 인스턴스이며, 이 인스턴스를 사용하여 정보를 기록합니다.

# import the logging library
import logging
 
# Get an instance of a logger
logger = logging.getLogger('django')
 
def my_view(request, arg1, arg):
 ...
 if bad_mojo:
 # Log an error message
 logger.error('Something went wrong!')

그러면 django라는 로거가 해당 정보를 해당 핸들러에게 넘겨주고, 핸들러는 포맷터와 필터를 이용해 정보를 처리한 후, 로그(파일, 데이터베이스에 저장 또는 이메일 보내기).

일반적으로 핸들러는 send_email, error_file 및 기타 처리 방법이 될 수 있으며 핸들러는 로거에서 재사용될 수 있습니다. 예를 들어 Django 프로세서는 send_email과 error_file이라는 두 개의 프로세서를 사용하고 요청 프로세서는 error_file과 info_file이라는 두 개의 프로세서를 사용합니다. 로거와 핸들러는 다대다 관계로 이해될 수 있습니다.

구성 방법

Python에서 .conf, .ini 등 다양한 형식으로 로깅을 구성할 수 있습니다.

Django에서는 로깅 구성을 설정에 씁니다. 해당 구성 및 설명은 다음과 같습니다(참고용).

#管理员邮箱
ADMINS = (
 ('laixintao','*******@163.com'),
)
 
#非空链接,却发生404错误,发送通知MANAGERS
SEND_BROKEN_LINK_EMAILS = True
MANAGERS = ADMINS
 
#Email设置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST= 'smtp.163.com'#QQ邮箱SMTP服务器(邮箱需要开通SMTP服务)
EMAIL_PORT= 25 #QQ邮箱SMTP服务端口
EMAIL_HOST_USER = '**********@163.com' #我的邮箱帐号
EMAIL_HOST_PASSWORD = '**************' #授权码
EMAIL_SUBJECT_PREFIX = 'website' #为邮件标题的前缀,默认是'[django]'
EMAIL_USE_TLS = True #开启安全链接
DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER #设置发件人
 
#logging日志配置
LOGGING = {
 'version': 1,
 'disable_existing_loggers': True,
 'formatters': {#日志格式 
 'standard': {
  'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'} 
 },
 'filters': {#过滤器
 'require_debug_false': {
  '()': 'django.utils.log.RequireDebugFalse',
  }
 },
 'handlers': {#处理器
 'null': {
  'level': 'DEBUG',
  'class': 'logging.NullHandler',
 },
 'mail_admins': {#发送邮件通知管理员
  'level': 'ERROR',
  'class': 'django.utils.log.AdminEmailHandler',
  'filters': ['require_debug_false'],# 仅当 DEBUG = False 时才发送邮件
  'include_html': True,
 },
 'debug': {#记录到日志文件(需要创建对应的目录,否则会出错)
  'level':'DEBUG',
  'class':'logging.handlers.RotatingFileHandler',
  'filename': os.path.join(BASE_DIR, "log",'debug.log'),#日志输出文件
  'maxBytes':1024*1024*5,#文件大小 
  'backupCount': 5,#备份份数
  'formatter':'standard',#使用哪种formatters日志格式
 },
 'console':{#输出到控制台
  'level': 'DEBUG',
  'class': 'logging.StreamHandler',
  'formatter': 'standard',
 },
 },
 'loggers': {#logging管理器
 'django': {
  'handlers': ['console'],
  'level': 'DEBUG',
  'propagate': False 
 },
 'django.request': {
  'handlers': ['debug','mail_admins'],
  'level': 'ERROR',
  'propagate': True,
 },
 # 对于不在 ALLOWED_HOSTS 中的请求不发送报错邮件
 'django.security.DisallowedHost': {
  'handlers': ['null'],
  'propagate': False,
 },
 } 
}

위 구성 파일에는 3개의 로그 프로세서가 있습니다.

  1. 'django.request': Django의 요청은 오류가 발생할 때 자동으로 오류를 기록한 다음 디버그를 사용하여 정보를 파일에 기록하고 mail_admins를 사용하여 정보를 보냅니다. 이메일을 통해 관리자. 여기 이메일 기능이 훌륭해요! 이는 일반 텍스트 메시지가 아니라 HTML 파일로, 브라우저에 표시되는 오류 페이지와 정확히 동일합니다! 이메일 기능을 정상적으로 사용하기 위해서는 위의 이메일 발신자 정보를 저처럼 설정해 주셔야 합니다. 이메일 주소를 신청하기 위해 NetEase에 직접 접속했습니다. 세 가지 사항에 특별한 주의를 기울이십시오. 1. 이메일 서비스 제공업체에 문의하여 SMTP 서비스를 활성화하십시오. 2. 이메일 서비스 제공업체마다 몇 가지 특별한 설정이 있을 수 있습니다. 예를 들어 NetEase는 다음과 같은 클라이언트 인증 코드를 제공합니다. 비밀번호이며, 웹페이지의 로그인 비밀번호가 아닙니다. 3. 서비스 제공업체가 전송 빈도에 제한을 두는지 주의하세요.

  2. 'django': 콘솔 프로세서를 사용하여 정보를 출력합니다. 개발 중에 이 프로세서를 사용할 수 있습니다(뭐? 인쇄? 너무 낮습니다!)

  3. 마지막 프로세서에 대한 댓글을 참조하세요.

마지막으로 로그 경로 응답에 대한 권한을 부여하는 것을 잊지 마세요. 예를 들어, Apache2 서버의 경우 www-data 쓰기 권한을 부여해야 합니다.

sudo chown -R [yourname]:www-data [log]
sudo chmod -R g+s [log]

Django 로그 모듈 로깅 구성에 대한 자세한 내용은 다음을 참조하세요. PHP 중국어 웹사이트를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.