相关疑难解决方法(0)

在多个模块中使用Python日志记录

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

Project 
 -- pkg01
   -- test01.py
 -- pkg02
   -- test02.py
 -- logging.conf
Run Code Online (Sandbox Code Playgroud)

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

import logging.config

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

logger.info('testing')
Run Code Online (Sandbox Code Playgroud)

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

python logging config

217
推荐指数
9
解决办法
15万
查看次数

如何在多个模块中使用logging.getLogger(__ name__)

从Python 2.7 的logginghowto(我的重点):

命名记录器时,一个好的习惯是在每个使用日志记录的模块中使用模块级记录器,命名如下:

logger = logging.getLogger(__name__)

这意味着记录器名称跟踪包/模块的层次结构,并且从记录器名称中记录事件的地方就很明显了。

听起来像个好建议。

现在,本logging食谱提供了多个模块的示例,这些示例使用硬编码的记录器名称而不是__name__常量。在示例的“主模块”中,我们发现

logger = logging.getLogger('spam_application')

在“辅助模块”中

module_logger = logging.getLogger('spam_application.auxiliary')

我将此示例逐字复制到具有以下结构的package文件夹中:

cookbook-example
|- __init__.py
|- main_module.py
|- auxiliary_module.py
Run Code Online (Sandbox Code Playgroud)

这没有问题,可以从主模块和辅助模块产生预期的日志记录输出,但实际上是这样:

如果现在__name__按照logginghowto的建议,用常数替换硬编码的记录器名称,则菜谱示例将崩溃:我仅从主模块获取记录消息,而从辅助模块中获取不到任何消息。

我一定想念一些明显的东西。有什么想法我做错了吗?

注意:

有很多非常类似的问题和相关的答案,如:123456,等等。但是,这些似乎都没有解决这个具体问题。

- 编辑 -

这是一个基于Cookbook示例的最小示例,显式名称字符串替换为__name__

main_module.py

import logging
import auxiliary_module

# create and configure main logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# create console …
Run Code Online (Sandbox Code Playgroud)

python logging

17
推荐指数
2
解决办法
1万
查看次数

Python日志记录-多个模块

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

project 
 -- logs
 -- project
    __init.py__
    classA.py
    classB.py
    utils.py
 -- main.py
Run Code Online (Sandbox Code Playgroud)

我已经设置了日志记录配置__init.py__下的项目如下:

import logging
from logging import StreamHandler
from logging.handlers import RotatingFileHandler

# Create the Logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# Create the Handler for logging data to a file
logger_handler = RotatingFileHandler('logs\\mylog.log', maxBytes=1024, backupCount=5)
logger_handler.setLevel(logging.INFO)

#Create the Handler for logging data to console.
console_handler = StreamHandler()
console_handler.setLevel(logging.INFO)

# Create a Formatter for formatting the log messages
logger_formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')

# Add the …
Run Code Online (Sandbox Code Playgroud)

python logging config

5
推荐指数
1
解决办法
2368
查看次数

标签 统计

logging ×3

python ×3

config ×2