我有一个django项目,其中包含3个不同的应用程序(A,B,C)。
我在settings.py
文件中按以下顺序加载应用程序:
INSTALLED_APPS = [
# Rest framework
'django_filters',
'django_apscheduler',
'rest_framework',
'corsheaders',
# Project applications
'application_A.apps.ApplicationAConfig',
'application_B.apps.ApplicationBConfig',
'application_C.apps.ApplicationCConfig',
...
]
我在A,B和C中分别有一个logging.conf
文件:
log_config.conf
[loggers]
keys=root,LogRunner
[handlers]
keys=consoleHandler, fileHandler
[formatters]
keys=logfileformatter
[logger_root]
handlers=fileHandler, consoleHandler
level=INFO
qualname=root
propagate=0
[logger_LogRunner]
handlers=fileHandler
level=INFO
qualname=nas_app_master
propagate=0
[handler_consoleHandler]
class=StreamHandler
formatter=logfileformatter
args=(sys.stdout,)
level=INFO
[handler_fileHandler]
class=handlers.RotatingFileHandler
level=INFO
args=('%(logfilename)s','a',500000,100,'utf8')
formatter=logfileformatter
[formatter_logfileformatter]
format=%(levelname)-10s | %(asctime)s | %(name)-25s | %(filename)-20s:%(lineno)3s | %(funcName)15s() | %(message)s
我使用自己编写的getLogger
方法在每个单独的应用程序中实例化记录程序,该方法采用了类__name__
(我的帮助程序方法可以正确获取应用程序和配置目录):< / p>
config_file = get_config_directory() + 'log_config.conf'
_log_url = get_app_root() + '/logs/' + log_file_name + '.log'
logging.config.fileConfig(config_file, defaults={'logfilename': _log_url}, disable_existing_loggers=False)
logger = logging.getLogger(log_class) # logger for this module
return logger
现在所有三个应用程序都具有相同的日志记录配置和相同的getLogger
。
我的问题
发生的情况是,有时将应用程序A的日志存储在\path\to\app_A\appA.log
中,但是通常它们也存储在app_B\appA.log
中。
为什么会这样?
每个应用程序都应该有自己的文件处理程序吗?调试时我注意到的一件事是,我在应用程序中实例化的每个记录器都没有自己的文件处理程序-因此它们默认为根记录器的文件处理程序。