サーチ…


Syslogサービスへのロギング

Djangoがローカルまたはリモートsyslogサービスにログを出力するように設定することは可能です。この設定では、Python組み込みのSysLogHandlerを使用します。

from logging.handlers import SysLogHandler
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format' : "[YOUR PROJECT NAME] [%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
        'syslog': {
            'class': 'logging.handlers.SysLogHandler',
            'formatter': 'standard',
            'facility': 'user',
            # uncomment next line if rsyslog works with unix socket only (UDP reception disabled)
            #'address': '/dev/log'
        }
    },
    'loggers': {
        'django':{
            'handlers': ['syslog'],
            'level': 'INFO',
            'disabled': False,
            'propagate': True
        }
    }
}

# loggers for my apps, uses INSTALLED_APPS in settings
# each app must have a configured logger
# level can be changed as desired: DEBUG, INFO, WARNING...
MY_LOGGERS = {}
for app in INSTALLED_APPS:
    MY_LOGGERS[app] = {
        'handlers': ['syslog'],
        'level': 'DEBUG',
        'propagate': True,
    }
LOGGING['loggers'].update(MY_LOGGERS)

Djangoの基本ログ設定

内部的には、DjangoはPythonロギングシステムを使用します。プロジェクトのロギングを設定するには多くの方法があります。ここにベースがあります:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'default': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt': "%Y-%m-%d %H:%M:%S"
        },
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'default'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'INFO',
        },
    }
}

フォーマッタ

出力のために出力されたときにログの表示を設定するために使用することができます。それぞれのフォーマッタにキー文字列を設定することによって、多くのフォーマッタを定義できます。次に、ハンドラを宣言するときにフォーマッタが使用されます。

ハンドラー

ログを印刷する場所を設定するために使用できます。上記の例では、それらはstdoutとstderrに送られます。さまざまなハンドラクラスがあります。

'rotated_logs': {
    'class': 'logging.handlers.RotatingFileHandler',
    'filename': '/var/log/my_project.log',
    'maxBytes': 1024 * 1024 * 5,  # 5 MB
    'backupCount': 5,
    'formatter': 'default'
    'level': 'DEBUG',
},

これにより、 filename tergetedされたfilenameログが生成されfilename 。この例では、現在のサイズが5 MBに達したときに新しいログファイルが作成されます(古いものはmy_project.log.1に名前が変更されます)。最新の5つのファイルはアーカイブ用に保持されます。

'mail_admins': {
    'level': 'ERROR',
    'class': 'django.utils.log.AdminEmailHandler'
},

これは、各ログをADMINS設定変数で指定されたユーザーにeamilで送信します。レベルがするように設定されているERRORレベルでこれだけのログ、 ERROR電子メールで送信されます。これは、プロダクションサーバーで潜在的なエラー50xについての情報を得るために非常に便利です。

他のハンドラはDjangoで使用できます。完全なリストについては、対応する文書をお読みください。フォーマッタと同様に、同じプロジェクトに複数のハンドラを定義し、それぞれ異なるキー文字列を設定することができます。各ハンドラは特定のロガーで使用できます。

ロガー

LOGGINGでは、各モジュールの最後の部分で、最小ロギングレベル、使用するハンドラなどを設定します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow