我们设置日志记录就像django docs告诉我们的那样:
https://docs.djangoproject.com/en/2.1/topics/logging/#using-logging
# import the logging library import logging # Get an instance of a logger logger = logging.getLogger(__name__) def my_view(request, arg1, arg): ... if bad_mojo: # Log an error message logger.error('Something went wrong!')
我想在每个想要记录的Python文件中避免这一行:
logger = logging.getLogger(__name__)
我想要简单:
logging.error('Something went wrong!')
但我们希望保留一个功能:我们希望在日志记录输出中看到Python文件名.
到目前为止,我们使用以下格式:
'%(asctime)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s'
示例输出:
2016-01-11 12:12:31 myapp.foo +68: ERROR Something went wrong
怎么避免logger = logging.getLogger(__name__)
?
您可以使用以下logging.basicConfig
方式定义可用的默认界面logging
:
import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s', )
现在,只要在应用程序中的任何位置执行以下操作,就会使用此定义:
import logging logging.error(...)
虽然__name__
无法使用,等效(和其他选项)都可以通过默认的LogRecord
属性,可以用于错误字符串格式化-包括module
,filename
和pathname
.以下是这个实际操作的双脚本演示:
scripta.py
import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(module)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s', ) from scriptb import my_view my_view()
scriptb.py
import logging def my_view(): # Log an error message logging.error('Something went wrong!')
scripta.py
使用添加的module
参数定义日志记录定义.在scriptb.py
我们只是需要进口logging
来获得访问该定义的默认.运行时scripta.py
会生成以下输出:
2016-01-14 13:22:24,640 scriptb root.my_view +9: ERROR [14144] Something went wrong!
其中显示了scriptb
发生错误记录的module().
根据这个答案,您可以继续使用任何来自Django的每个模块的日志记录配置,关闭Django处理并设置根处理程序,如下所示:
# settings.py - django config LOGGING_CONFIG = None # disables Django handling of logging LOGGING = {...} # your standard Django logging configuration import logging.config logging.config.dictConfig(LOGGING)