ホームページ Java &#&チュートリアル Django ログモジュールのロギング設定の詳細説明

Django ログモジュールのロギング設定の詳細説明

Feb 16, 2017 pm 05:01 PM

プログラム開発においてログは欠かせません。ログを通じて、どこにエラーがあるのか​​、どのような異常があるのか​​を分析することができます。これは実稼働環境で非常に役立ちます。 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 つのログ プロセッサがあります。それらは次のとおりです:

  1. 'django.request': Django のリクエストはエラーが発生すると自動的に記録し、デバッグを使用して情報をファイルに記録し、mail_admins を使用して情報を電子メールで管理者に送信します。ここのメール機能は素晴らしいです!これはプレーン テキスト メッセージではなく、ブラウザで表示されるエラー ページとまったく同じ HTML ファイルです。メール機能を正常に使用するには、私と同様に上記のメール送信者情報を設定する必要があります。 NetEase に直接行ってメール アドレスを申請しました。次の 3 つの点に特に注意してください。 1. 必ず電子メール サービス プロバイダーにアクセスして SMTP サービスを有効にしてください。 2. 異なる電子メール サービス プロバイダーでは、いくつかの特別な設定がある場合があります。たとえば、NetEase は次のようなクライアント認証コードを提供します。 Webページへのログインパスワードではありません。 3. サービスプロバイダーが送信頻度に制限を設けていないか注意してください。

  2. 「django」: コンソールプロセッサを使用して情報を出力します。このプロセッサは開発中に使用できます (何? 印刷? 低すぎます!)

  3. 最後のプロセッサのコメントを参照してください。

最後に、ログパスの応答に許可を与えることを忘れないでください。たとえば、Apache2 サーバーの場合は、www-data 書き込み許可を与える必要があります:

sudo chown -R [yourname]:www-data [log]
sudo chmod -R g+s [log]
ログイン後にコピー

Django ログ モジュールのロギング設定の詳細については、PHP 中国語 Web サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

intellijideaultimatiateバージョンを使用してスプリングを開始します...

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

データベースクエリにTKMYBATISを使用するときに、エンティティクラスの変数名の構築クエリ条件をエレガントに取得する方法は? データベースクエリにTKMYBATISを使用するときに、エンティティクラスの変数名の構築クエリ条件をエレガントに取得する方法は? Apr 19, 2025 pm 09:51 PM

データベースクエリにTKMYBATISを使用する場合、クエリ条件を構築するためにエンティティクラスの変数名を優雅に取得する方法は一般的な問題です。この記事はピン留めします...

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

See all articles