首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否应该将Python记录器作为参数传递?

是否应该将Python记录器作为参数传递?
EN

Stack Overflow用户
提问于 2013-08-05 07:31:57
回答 3查看 4.9K关注 0票数 5

我们正在开发的Python应用程序需要一个记录器。一位同事认为,记录器应该在使用它的每个类中创建和配置。我的观点是,应该在应用程序启动时创建和配置它,并将其作为构造函数参数传递。

这两个变体都有其优点,我们不确定最佳实践是什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-05 11:52:45

也许这能帮你想出个主意?当然,您可以更好地读取配置文件或其他设置,但这是一个快速的例子。

配置日志记录的单独模块:mylogmod.py

代码语言:javascript
运行
复制
import logging

FILENAME = "mylog.log" # Your logfile
LOGFORMAT = "%(message)s" # Your format
DEFAULT_LEVEL = "info" # Your default level, usually set to warning or error for production
LEVELS = {
    'debug':logging.DEBUG,
    'info':logging.INFO,
    'warning':logging.WARNING,
    'error':logging.ERROR,
    'critical':logging.CRITICAL}

def startlogging(filename=FILENAME, level=DEFAULT_LEVEL):
    logging.basicConfig(filename=filename, level=LEVELS[level], format=LOGFORMAT)

main.py

代码语言:javascript
运行
复制
import logging
from mylogmod import startlogging
from myclass import MyClass

startlogging()

logging.info("Program started...")
mc = MyClass()

具有自测试功能的模块中的类myclass.py。您可以在unittest中执行类似的操作:(请注意,不需要在单元测试中导入日志模块,只要startlogging函数就足够了。通过这种方式,可以将默认级别设置为警告或错误,将单元测试和自测试设置为调试)

代码语言:javascript
运行
复制
import logging

class MyClass(object):
    def __init__(self):
        logging.info("Initialze MyClass instance...")

if __name__ == "__main__":
    from mylogmod import startlogging
    startlogging(level="debug")
    logging.debug("Test MyClass...")
    #... rest of test code...
票数 0
EN

Stack Overflow用户

发布于 2017-02-17 15:07:24

通常不会;它通常不打算作为参数传递。

约定是在每个模块的顶部使用log = logging.getLogger(__name__)。每个模块的__name__值是不同的。然后,__name__的结果值可以反映在每个日志消息中。

票数 3
EN

Stack Overflow用户

发布于 2013-08-05 07:49:52

我认为把记录器作为参数传递不是个好主意。您应该将全局记录器视为自己的模块,这将是最好的主意。例如:

logger.py

代码语言:javascript
运行
复制
import logging
log = logging.getLogger('')

classFoo.py

代码语言:javascript
运行
复制
form logger import log
log.debug('debug message')

classBar.py

代码语言:javascript
运行
复制
form logger import log
log.warn('warn!')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18052778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档