当前位置: 首页 > 面试题库 >

避免使用logger = logging.getLogger(__ name__)

长孙哲
2023-03-14
问题内容

我们像Django文档告诉我们的那样设置日志记录:

https://docs.djangoproject.com/zh-CN/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属性,可以用于错误字符串格式化-包括modulefilenamepathname。以下是此操作的两个脚本演示:

脚本

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记录错误的模块()。

根据此答案,您可以通过关闭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)


 类似资料:
  • 让我们看一下使用两种不同的方式去计算单词的个数,第一种方式使用 reduceByKey 另外一种方式使用 groupByKey: val words = Array("one", "two", "two", "three", "three", "three") val wordPairsRDD = sc.parallelize(words).map(word => (word, 1)) val

  • null本身不是对象,也不是Objcet的实例 问题: null代表不确定的对象, 是一个很模糊的概念, 容易产生二义性 Map.get(key)若返回value值为null,其代表的含义可能是该键指向的value值是null,亦或者该键在map中并不存在 优点: 从内存消耗和效率方面,null更加廉价 优化: Optional com.google.common.base.Optional Op

  • 问题内容: 建议在HTML页面中使用表格(现在已经有了CSS)? 表格有什么用途?表具有哪些CSS所没有的功能? 问题答案: 一点都不。但是将表格用于表格数据。只是不要将它们用于一般布局。 但是,如果您显示表格数据(例如结果或什至是表格),请继续使用表格!

  • 问题内容: 我有以下(也许是常见的)问题,此刻绝对使我感到困惑: 有几个生成的事件对象扩展了抽象类,我想将它们划分为Session Bean,例如 但是将来可能会有两种以上的事件类型,因此if- else将会很长,甚至可能无法读取。另外,在这种情况下,我认为这并不是真正的“最佳实践”。 我可以在类型中添加一个抽象方法,并让它们自行划分,但随后我必须在每个实体中注入特定的Session Bean。

  • 问题内容: 具有“ instanceof”操作链被认为是“代码异味”。标准答案是“使用多态性”。在这种情况下我该怎么办? 基类有许多子类。他们都不在我的控制之下。类似的情况是Java类Integer,Double,BigDecimal等。 我确实可以控制等。 我不想使用几行代码就能完成的代码。(有时,我制作了一个HashMap将映射到的实例,将映射到的实例,等等。但是今天我想要一些更简单的方法。)

  • 问题内容: 我读到应该避免赞成和。我对弄乱Loop并没有信心,也没有完全理解Codex。 下面的代码是否使用?如果是,并且由于应该避免,那么您能建议一种不使用但仍然完成相同任务的方法吗? 此代码用于按随机或按价格对帖子进行排序。 。 使用此代码将链接A(随机)和链接B(价格)发布在我的菜单中。因此,网站的访问者只需单击链接即可对帖子进行排序。 问题答案: 我已经针对WPSE这个主题做了非常详细的解

  • 我一直收到NoClassDefoundError错误。我试图使用JavaMail API发送电子邮件,但当我使用SMTPMessage类创建Message实例时发生错误。 我知道我需要激活库,但它还是不起作用。 错误发生在这段代码的第一行。 堆栈跟踪