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

python.logging:为什么我的non-basicConfig设置不起作用?

商宝
2023-03-14
问题内容

我想从主模块和所有子模块登录到单个html" target="_blank">日志文件。

从主文件(我在其中定义记录器)发送的日志消息按预期工作。但是缺少从调用发送到导入函数的函数。

如果我使用下面的示例1中的logging.basicConfig,它将正常工作。但是允许更多自定义设置的第二个示例不起作用。

有什么想法吗?

# in the submodule I have this code
import logging
logger = logging.getLogger(__name__)

示例1-工作

在这里,我创建了两个处理程序,并将它们传递给basicConfig

# definition of root looger in main module

formatter = logging.Formatter(fmt="%(asctime)s %(name)s.%(levelname)s: %(message)s", datefmt="%Y.%m.%d %H:%M:%S")

handler = logging.FileHandler('logger.log')
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)

handler2 = logging.StreamHandler(stream=None)
handler2.setFormatter(formatter)
handler2.setLevel(logging.DEBUG)

logging.basicConfig(handlers=[handler, handler2], level=logging.DEBUG)
logger = logging.getLogger(__name__)

示例2-无法正常工作

在这里,我创建两个处理程序,addHandler()并将它们添加到根记录器:

# definition of root looger in main module

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

handler = logging.FileHandler('logger.log')
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
#handler.setLevel(logging.ERROR)
logger.addHandler(handler)

handler = logging.StreamHandler(stream=None)
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)

问题答案:

您需要在软件的主模块中配置(唯一的)根记录器。这是通过调用

logger = logging.getLogger() #without arguments

代替

logger = logging.getLogger(__name__)

(有关记录的Python文档)

第二个示例使用您的脚本名称创建一个单独的子记录器。

如果在子模块中未定义任何处理程序,则将日志消息向下传递到根记录程序以进行处理。

一个相关的问题可以在这里找到: Python日志记录-
如何继承root记录程序级别和处理程序



 类似资料:
  • Stage.close()对我不起作用。 我查看了:JavaFX2.0:关闭一个舞台(窗口) 这是我的代码: 下面是调用消息框类的代码:

  • 我想为我的jFrame设置一个背景,我正在使用下面的代码: 当我执行它时,在系统输出中我有5个“完成”。所以这意味着所有任务都已执行。我不明白错误在哪里。请帮帮我!

  • 我正在尝试检测我的两个精灵何时发生碰撞。我做的第一件事是在我的播放器周围创建一个矩形(称为player.img),然后在我想检测的树周围创建另一个矩形(称为背景.treesrect)。我将玩家矩形的坐标设置为等于当用户按下键移动时更新的坐标,但玩家矩形不移动。然后我使用精灵.碰撞(精灵)函数来检测它们是否碰撞并且没有检测到。有人可以向我展示为什么我的播放器矩形没有更新以及其他任何可能错误的内容吗?

  • 问题内容: 我在这里有点困惑。如果我将变量传递给json_decode,它将不起作用: 第一个回显正确显示了我传递的JSON字符串,例如 第二个回显显示NULL。因此,我从第一个回显中获取了字符串,并编写了以下代码: 你怎么说,它向我展示了正确解码的数组。字符串绝对相同,我什至保留转义字符。也许是问题所在? 问题答案: 看起来您的服务器已启用。无论是将其禁用或运行通过使用它之前。

  • 还不起作用。所以我放弃链接,我只是编码:

  • 我对这段代码有一个问题,因为我似乎找不到问题所在?这是我试图解决的问题:-声明并编写一个名为valid_triangle的函数,它将表示三角形三边长度的三个实数作为参数,并根据这三个长度是否能够构成三角形输出真或假。 关于三角形的以下规则: 三角形只能有正长度的边 三角形任意两条边的长度之和必须大于第三条边的长度