ホームページ >Java >&#&チュートリアル >Django ログモジュールのロギング設定の詳細説明
プログラム開発においてログは欠かせません。ログを通じて、どこにエラーがあるのか、どのような異常があるのかを分析することができます。これは実稼働環境で非常に役立ちます。 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 という名前のロガーが、対応するハンドラーに情報を渡します。ハンドラーは、フォーマッタとフィルターを使用して情報を処理し、ログを送信します (ファイル、データベースに保存するか、ログを送信します)。 Eメール)。
一般に、ハンドラーは、send_email、error_file などの処理を担当することができ、ハンドラーはロガーで再利用できます。たとえば、Django プロセッサは send_email と error_file という 2 つのプロセッサを使用し、リクエスト プロセッサは error_file と info_file という 2 つのプロセッサを使用します。Logger とハンドラは多対多の関係として理解できます。
設定方法
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 つのログ プロセッサがあります。それらは次のとおりです:
'django.request': Django のリクエストはエラーが発生すると自動的に記録し、デバッグを使用して情報をファイルに記録し、mail_admins を使用して情報を電子メールで管理者に送信します。ここのメール機能は素晴らしいです!これはプレーン テキスト メッセージではなく、ブラウザで表示されるエラー ページとまったく同じ HTML ファイルです。メール機能を正常に使用するには、私と同様に上記のメール送信者情報を設定する必要があります。 NetEase に直接行ってメール アドレスを申請しました。次の 3 つの点に特に注意してください。 1. 必ず電子メール サービス プロバイダーにアクセスして SMTP サービスを有効にしてください。 2. 異なる電子メール サービス プロバイダーでは、いくつかの特別な設定がある場合があります。たとえば、NetEase は次のようなクライアント認証コードを提供します。 Webページへのログインパスワードではありません。 3. サービスプロバイダーが送信頻度に制限を設けていないか注意してください。
「django」: コンソールプロセッサを使用して情報を出力します。このプロセッサは開発中に使用できます (何? 印刷? 低すぎます!)
最後のプロセッサのコメントを参照してください。
最後に、ログパスの応答に許可を与えることを忘れないでください。たとえば、Apache2 サーバーの場合は、www-data 書き込み許可を与える必要があります:
sudo chown -R [yourname]:www-data [log] sudo chmod -R g+s [log]
Django ログ モジュールのロギング設定の詳細については、PHP 中国語 Web サイトに注目してください。