Dvu*_*gme 7 python logging error-logging python-2.7
我是一个python新手,试图实现登录我的代码.我有两个模块
main.py submodule.py
main.py
import logging
from logging.handlers import RotatingFileHandler
import submodule
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
fh = RotatingFileHandler('master.log', maxBytes=2000000, backupCount=10)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.debug('DEBUG LEVEL - MAIN MODULE')
logger.info('INFO LEVEL - MAIN MODULE')
submodule.loggerCall()
Run Code Online (Sandbox Code Playgroud)
submodule.py
import logging
from logging.handlers import RotatingFileHandler
def loggerCall():
logger = logging.getLogger(__name__)
# logger.setLevel(logging.DEBUG)
fh = RotatingFileHandler('master.log', maxBytes=2000000, backupCount=10)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.debug('SUBMODULE: DEBUG LOGGING MODE : ')
logger.info('Submodule: INFO LOG')
return
Run Code Online (Sandbox Code Playgroud)
我认为,当我从子模块调用getLogger时,它应该从root logger继承日志级别和处理程序详细信息.但是,在我的情况下,我必须在子模块中再次指定日志级别和处理程序,以使它们打印到相同的日志文件.
另外,如果我的子模块中有很多方法和类.如何在不必再次定义日志级别和处理程序的情况下进行操作.
想法是根据主模块中设置的日志级别,将主模块和子模块打印在同一日志中的单个日志文件.
提前致谢
对不起,因为这可能是一个重复的问题,我确实经历了那些类似的问题,但无法弄清楚这是如何工作的.因此发布这个问题.我不是故意创建一个重复的bcz我没有查找它.
这里的问题是你没有初始化根记录器; 您正在初始化主模块的记录器.
试试这个main.py:
import logging
from logging.handlers import RotatingFileHandler
import submodule
logger = logging.getLogger() # Gets the root logger
logger.setLevel(logging.DEBUG)
fh = RotatingFileHandler('master.log', maxBytes=2000000, backupCount=10)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.debug('DEBUG LEVEL - MAIN MODULE')
logger.info('INFO LEVEL - MAIN MODULE')
submodule.loggerCall()
Run Code Online (Sandbox Code Playgroud)
然后尝试使用submodule.py:
def loggerCall():
logger = logging.getLogger(__name__)
logger.debug('SUBMODULE: DEBUG LOGGING MODE : ')
logger.info('Submodule: INFO LOG')
return
Run Code Online (Sandbox Code Playgroud)
由于您说要将所有子模块中的日志消息发送到同一位置,因此应初始化根记录器,然后根据需要使用消息记录方法(以及setlevel()调用).因为您的子模块没有显式处理程序,所以logging.getLogger(__name__)将遍历树到根,在那里它将找到您在main.py中建立的处理程序.
| 归档时间: |
|
| 查看次数: |
4014 次 |
| 最近记录: |