如何在我的日志消息前加上当前日期和时间?
How do I prefix my log messages with the current date and time?
我正在使用 Python 3.9 和 Django 3.2。我在 settings.py 文件
中配置了日志记录
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'root': {
'handlers': ['console'],
'level': 'INFO',
},
}
当我登录我的 类 之一时,我是这样做的
import logging
...
class TransactionService:
def __init__(self):
self._logger = logging.getLogger(__name__)
def my_method(self, arg1, arg2):
...
self._logger.info("Doing some logging here.")
如何配置我的记录器,以便在打印消息时以当前日期和时间为前缀?
为您的记录器添加格式化程序。例如:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'prepend_date': {
'format': '{asctime} {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'prepend_date',
},
},
'root': {
'handlers': ['console'],
'level': 'INFO',
},
}
这对我有用(改编自 thorndeux 的回答):
import logging.config
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'prepend_date': {
'format': '{asctime} {levelname}: {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'prepend_date',
},
},
'root': {
'handlers': ['console'],
'level': 'INFO',
},
}
logging.config.dictConfig(LOGGING)
logging.info('foo')
logging.warning('bar')
打印
2021-11-28 16:05:13,469 INFO: foo
2021-11-28 16:05:13,469 WARNING: bar
您的问题的答案可以在 official documentation 中找到,请阅读全文。
import logging
FORMAT = '%(asctime)s %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.info("Doing some logging here.")
这将打印:
2021-11-29 14:06:59,825 Doing some logging here.
您的示例中缺少的是 formatters
(添加到以下 LOGGING 字典):
LOGGING = {
...
"formatters": {"console": {"format": "%(asctime)s %(message)s"}},
# and add it to handlers
"handlers": {"console": {"class": "logging.StreamHandler", "formatter": "console"}},
...
}
您可能希望将 类 中的日志记录设置更改为类似
的另一件事
import logging
logger = logging.getLogger(__name__)
...
class TransactionService:
def my_method(self, arg1, arg2):
...
logger.info("Doing some logging here.")
您还可以在 official Django documentation 中找到完整示例(该小节中的最后一个示例):
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
},
'simple': {
'format': '{levelname} {message}',
'style': '{',
},
},
'filters': {
'special': {
'()': 'project.logging.SpecialFilter',
'foo': 'bar',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['special']
}
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'myproject.custom': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
'filters': ['special']
}
}
}
我正在使用 Python 3.9 和 Django 3.2。我在 settings.py 文件
中配置了日志记录LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'root': {
'handlers': ['console'],
'level': 'INFO',
},
}
当我登录我的 类 之一时,我是这样做的
import logging
...
class TransactionService:
def __init__(self):
self._logger = logging.getLogger(__name__)
def my_method(self, arg1, arg2):
...
self._logger.info("Doing some logging here.")
如何配置我的记录器,以便在打印消息时以当前日期和时间为前缀?
为您的记录器添加格式化程序。例如:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'prepend_date': {
'format': '{asctime} {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'prepend_date',
},
},
'root': {
'handlers': ['console'],
'level': 'INFO',
},
}
这对我有用(改编自 thorndeux 的回答):
import logging.config
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'prepend_date': {
'format': '{asctime} {levelname}: {message}',
'style': '{',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'prepend_date',
},
},
'root': {
'handlers': ['console'],
'level': 'INFO',
},
}
logging.config.dictConfig(LOGGING)
logging.info('foo')
logging.warning('bar')
打印
2021-11-28 16:05:13,469 INFO: foo
2021-11-28 16:05:13,469 WARNING: bar
您的问题的答案可以在 official documentation 中找到,请阅读全文。
import logging
FORMAT = '%(asctime)s %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.info("Doing some logging here.")
这将打印:
2021-11-29 14:06:59,825 Doing some logging here.
您的示例中缺少的是 formatters
(添加到以下 LOGGING 字典):
LOGGING = {
...
"formatters": {"console": {"format": "%(asctime)s %(message)s"}},
# and add it to handlers
"handlers": {"console": {"class": "logging.StreamHandler", "formatter": "console"}},
...
}
您可能希望将 类 中的日志记录设置更改为类似
的另一件事import logging
logger = logging.getLogger(__name__)
...
class TransactionService:
def my_method(self, arg1, arg2):
...
logger.info("Doing some logging here.")
您还可以在 official Django documentation 中找到完整示例(该小节中的最后一个示例):
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
'style': '{',
},
'simple': {
'format': '{levelname} {message}',
'style': '{',
},
},
'filters': {
'special': {
'()': 'project.logging.SpecialFilter',
'foo': 'bar',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['special']
}
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'myproject.custom': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
'filters': ['special']
}
}
}