使用TimedRotatingFileHandler登录Django项目时,记录器会在开始时记录到默认文件,并且在午夜之后,它将开始记录到新文件,并在末尾附加日期。例:如果我给的文件名是server_logs,它将记录到该默认文件直到午夜,然后开始登录新文件,例如:server_logs.2019-12-09。到目前为止,一切都很好。但是,如果重新启动服务器,它将再次开始记录到server_logs文件,而不是当前日期的最新文件。我希望它即使在服务器重新启动后也继续记录到最新文件。我该如何解决这个问题?
此外,在日志文件中,在进行日志记录时,我只想要正在记录到该文件的文件夹名称和文件名。如果我使用%pathname,则会得到一个路径名称,例如:“ / some / log / path / appFolder / file.py”。如果我使用%filename,则只会得到“ file.py”。
例如:
2019-12-10 06:37:42,010, ERROR, views.py, get, LineNo 13 : This is the message.
或
2019-12-10 03:54:47,173, ERROR, /some/long/path/name/that/I/want/to/avoid/testApp/views.py, get, LineNo 13 This is the message.
我想将其格式化为“ testApp / views.py”。
例如:
2019-12-10 06:37:42,010, ERROR, testApp/views.py, get, LineNo 13 : This is the message.
我正在使用的配置是:
import os
import logging
logName = "server_logs"
apps_logging_path = os.getenv("apps_logging_folder") + logName
middleware_logging_path = os.getenv("middleware_logging_folder") + logName
apps_logger_level = "DEBUG"
middleware_logger_level = "DEBUG"
console_logger_level = "DEBUG"
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'large': {
'format': '%(asctime)s, %(levelname)s, %(filename)s, %(funcName)s, LineNo %(lineno)d : %(message)s'
},
'tiny': {
'format': '%(asctime)s %(message)s '
}
},
'handlers': {
'app_logger': {
'level': apps_logger_level,
'class': 'logging.handlers.TimedRotatingFileHandler',
'when': 'midnight',
'interval': 1,
'filename': apps_logging_path,
'formatter': 'large',
},
'console' : {
'level' : console_logger_level,
'class' : 'logging.StreamHandler',
},
'middleware_logger': {
'level': middleware_logger_level,
'class': 'logging.handlers.TimedRotatingFileHandler',
'when': 'midnight',
'interval': 1,
'filename': middleware_logging_path,
'formatter': 'large',
},
},
'loggers': {
'apps_logger': {
'handlers': ["app_logger", "console"],
'level': apps_logger_level,
'propagate': False,
},
'middleware_logger': {
'handlers': ['console', 'middleware_logger'],
'level': middleware_logger_level,
'propagate': False,
},
},
}