Di dalam pengembangan perangkat lunak, log sangat penting. Berikut adalah konfigurasi logging yang sering saya gunakan saat bekerja dengan proyek Django.
PATH_LOG = os.path.join(BASE_DIR, "log")
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'default': {
'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
'[%(levelname)s][%(message)s]'
},
'short': {
'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
},
'simple': {
'format': '%(message)s'
}
},
'filters': {
'debug_only': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['debug_only'],
'class': 'logging.StreamHandler',
'formatter': 'short'
},
'file_info': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(PATH_LOG, "app_info.log"),
'maxBytes': 1024 * 1024 * 50,
'backupCount': 3,
'formatter': 'default',
'encoding': 'utf-8',
},
'file_time': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': os.path.join(PATH_LOG, "app_info.log"),
'backupCount': 3,
'when': 'D',
'formatter': 'default',
'encoding': 'utf-8',
},
'file_error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(PATH_LOG, "app_error.log"),
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5,
'formatter': 'default',
'encoding': 'utf-8',
},
'file_collect': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(PATH_LOG, "app_collect.log"),
'maxBytes': 1024 * 1024 * 50,
'backupCount': 5,
'formatter': 'simple',
'encoding': 'utf-8'
}
},
'loggers': {
'': {
'handlers': ['file_info', 'console', 'file_error'],
'level': 'DEBUG',
'propagate': True
},
'collector': {
'handlers': ['console', 'file_collect'],
'level': 'INFO'
}
},
}
# Konfigurasi file log
PATH_LOG = os.path.join(BASE_DIR, "log") # Direktori penyimpanan file log
LOGGING = { # Pengaturan log
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'default': {
'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
'[%(levelname)s][%(message)s]'
},
'short': {
'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
},
'simple': {
'format': '%(message)s'
}
},
'filters': {
'debug_only': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['debug_only'],
'class': 'logging.StreamHandler',
'formatter': 'short'
},
'file_info': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(PATH_LOG, "app_info.log"),
'maxBytes': 1024 * 1024 * 50,
'backupCount': 3,
'formatter': 'default',
'encoding': 'utf-8',
},
'file_time': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': os.path.join(PATH_LOG, "app_info.log"),
'backupCount': 3,
'when': 'D',
'formatter': 'default',
'encoding': 'utf-8',
},
'file_error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(PATH_LOG, "app_error.log"),
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5,
'formatter': 'default',
'encoding': 'utf-8',
},
'file_collect': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(PATH_LOG, "app_collect.log"),
'maxBytes': 1024 * 1024 * 50,
'backupCount': 5,
'formatter': 'simple',
'encoding': 'utf-8'
}
},
'loggers': {
'': {
'handlers': ['file_info', 'console', 'file_error'],
'level': 'DEBUG',
'propagate': True
},
'collector': {
'handlers': ['console', 'file_collect'],
'level': 'INFO'
}
},
}
Bentuk penjelasan lengkap### Penggunaan
views.py:
...
import logging
# Membuat logger dengan nama modul saat ini
logger = logging.getLogger(__name__)
# Membuat logger dengan nama khusus
collector_logger = logging.getLogger('collector')
Setelah membuat folder log di direktori utama, Anda bisa mulai menulis log.