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

使用登录多个模块

赫连冠玉
2023-03-14
问题内容

我有一个具有以下结构的小型python项目-

Project 
 -- pkg01
   -- test01.py
 -- pkg02
   -- test02.py
 -- logging.conf

我计划使用默认的日志记录模块将消息打印到stdout和日志文件。要使用日志记录模块,需要进行一些初始化-

import logging.config

logging.config.fileConfig('logging.conf')
logger = logging.getLogger('pyApp')

logger.info('testing')

目前,在开始记录消息之前,我会在每个模块中执行此初始化。是否可以只在一个位置执行一次初始化,以便通过在整个项目中记录日志来重复使用相同的设置?


问题答案:

最佳实践是在每个模块中都定义一个记录器,如下所示:

import logging
logger = logging.getLogger(__name__)

在模块顶部附近,然后在模块中的其他代码中执行例如

logger.debug('My message with %s', 'variable data')

如果您需要在模块内部细分日志记录活动,请使用例如

loggerA = logging.getLogger(__name__ + '.A')
loggerB = logging.getLogger(__name__ + '.B')

和日志记录loggerA,并loggerB适当。

在您的一个或多个主程序中,执行例如:

def main():
    "your program code"

if __name__ == '__main__':
    import logging.config
    logging.config.fileConfig('/path/to/logging.conf')
    main()

要么

def main():
    import logging.config
    logging.config.fileConfig('/path/to/logging.conf')
    # your program code

if __name__ == '__main__':
    main()

见这里用于从多个模块记录,并在这里用于代码日志配置将被用作其它的代码库模块。

更新: 调用时fileConfig(),您可能想要指定disable_existing_loggers=False是否使用Python
2.6或更高版本(有关更多信息,请参阅文档)。缺省值是True为了向后兼容,fileConfig()除非所有现有记录器或其祖先在配置中被明确命名,否则它将被禁用。将该值设置为False,将保留现有记录器。如果使用的是Python
2.7 / Python
3.2或更高版本,则不妨考虑使用dictConfig()API,fileConfig()因为它提供了对配置的更多控制,因此比它更好。




 类似资料:
  • 我是身份验证和安全领域的新手,我试图扩展我的应用程序的身份验证机制,该机制目前提供传统的用户名/密码身份验证,以提供用户通过LDAP服务器进行身份验证。 在当前的实现中,应用程序使用服务器API的j_security_check线程对用户进行身份验证。Jboss的standalone.xml文件有一个登录模块,指向myLoginModuleClass类,该类扩展了Jboss.security.au

  • 我对Spring Security配置有问题。 当我以用户1身份登录一台计算机,然后我将以用户2身份登录另一台计算机时,刷新后的第一台计算机将所有内容都视为用户2。 换句话说,不可能同时与不同的用户进行两次会话。 配置: Spring Security版本:4.0.1。发布 Spring版本:4.1.6。发布 控制器中的登录请求:

  • 我目前正在开发一个需要gmail收件箱的应用程序。目前我正在使用带有凭据的Gmail API。json和令牌。pickle,虽然每次使用脚本时我都想使用其他凭据登录,但这很正常。我对这个API很陌生,想知道是否可以使用令牌所用凭据以外的其他凭据登录。泡菜。 Gmail API 要当前获取gmail收件箱,我使用以下代码: imaplib 我尝试获取某个用户收件箱的另一种方法是使用imaplib和电

  • 我有一个小的python项目,它有如下结构-- 我计划使用默认日志模块将消息打印到stdout和一个日志文件。要使用日志模块,需要进行一些初始化- 目前,我在开始记录消息之前在每个模块中执行此初始化。是否有可能在一个地方只执行一次初始化,以便通过在整个项目中进行日志记录来重用相同的设置?

  • 我正在用Spring、Spring Security和Hibernate制作一个基本的Tic-tac-toe项目。该应用程序可以为数据库中的每个登录用户保存游戏,并允许我们随时加载它。这不是问题,但在涉及多线程时会出现问题。当我在单个浏览器窗口中运行单个应用程序时,一切都很好。但当我打开另一个窗口时,两个玩家正在玩同一个游戏。 我知道这可能是由Spring创建的bean单例引起的,但我确信不是。为

  • 示例:项目名称:1。CarMaintenanceProject.2.BikeMaintenanceProject。3.MotorCycleMaintenanceProject。 我想为每个项目一个登录,但可以访问多个项目,而不需要更多的登录,示例我成功登录BikeMaintenanceProject,然后我将访问MotorcycleMaintenanceProject而不登录。