使用 python 日志模块在 VS Code 中没有输出

Meg*_* M. 2 python logging visual-studio-code python-logging

我在 Windows 10 上使用 VS Code 1.73.1,并使用 Pythonlogging模块改造我的程序。我的程序总体运行正常。我做的主要事情是将所有打印语句更改为,logger.debug并且我知道变量格式需要从更改{}%s。我还将该encoding标志添加到我的文件处理程序中。

还有几件事:

  1. 当我从 VS Code 命令行运行它时,它会创建一个包含调试语句的文件,但不会在终端、调试控制台或输出窗口中显示任何输出。
  2. 当我使用该F5函数运行它时,它不会创建文件或在任何地方显示任何控制台输出。

print('something')根据设置在终端或调试控制台中工作并显示launch.json,但logger.debug('something')不在任一控制台中显示。

我的请求/问题: 使用logger.debug,为什么没有任何内容打印到控制台,甚至没有创建文件?

我还尝试在其自己的单独文件中运行下面的代码.py,但出现同样的问题:
print显示到调试控制台,但logger.debug没有。

记录代码块:

import logging

# Create a custom logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Streaming Handler
c_handler = logging.StreamHandler()
c_handler.setLevel(logging.INFO)
c_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
c_handler.setFormatter(c_format)
logger.addHandler(c_handler)
# File Handler
f_handler = logging.FileHandler('download_shelf.log', encoding='utf-8')
f_handler.setLevel(logging.DEBUG)
f_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
f_handler.setFormatter(f_format)
logger.addHandler(f_handler)

logger.debug(f"Log messages:") ### `print` statement displays in either the Terminal 
                               ### or Debug Console depending on `launch.json` setting
Run Code Online (Sandbox Code Playgroud)

我确保我的launch.json文件已设置在本地.vscode文件夹中(请参阅底部代码部分)。但是,我确实必须手动创建此文件,然后重新启动 VS Code。我发现的信息说调试面板中有一个链接,我知道我以前见过。该文件不存在。

我的目录结构:

toplevel/
    .vscode/
        launch.json
    src/
        subdirectory/
           myfile.py
Run Code Online (Sandbox Code Playgroud)

我的launch.json文件包含"console": "internalConsole"

{
    "configurations": [
        {"name":"Python: Current File",
        "type":"python",
        "request":"launch",
        "program":"${file}",
        // "console":"integratedTerminal",
        "console": "internalConsole",
        "justMyCode":true
        },
    ]
}
Run Code Online (Sandbox Code Playgroud)

Meg*_* M. 5

使用不同的记录器示例后,我意识到问题是我使用的第一个示例中的级别设置有“INFO”而不是“DEBUG”,所以没有显示任何内容。哎呀...

import logging

logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
console = logging.StreamHandler()
console.setLevel(level=logging.DEBUG)
formatter =  logging.Formatter('%(levelname)s : %(message)s')
console.setFormatter(formatter)
logger.addHandler(console)

logger.debug('simple message')
Run Code Online (Sandbox Code Playgroud)