标签: python-logging

如何在整个 Python 应用程序中使用单个 Python 日志记录对象?

Python提供了日志记录模块。我们可以使用记录器代替打印并使用其多个日志级别。这里的问题是,当我们使用记录器时,我们将日志字符串传递到记录器对象中。这意味着记录器对象必须可以从整个 Python 程序中的每个函数/方法和类访问。

logger = logging.getLogger('mylogger')
logger.info('This is a message from mylogger.')
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,对于可能分为多个源文件并由多个函数/方法和类组成的大型 Python 程序,我们如何确保在任何地方都使用相同的记录器对象来记录消息?或者我对如何使用日志记录模块有错误的想法?

python logging python-logging

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

如果在声明之前调用 logging.info(),Python 中的 logging.basicConfig 将不起作用

基于此答案,启用详细日志记录的更简单方法

让我们以这个 Python 脚本为例。

import argparse
import logging


def main():
    import argparse
    import logging

    parser = argparse.ArgumentParser(
        description='A test script for http://stackoverflow.com/q/14097061/78845'
    )
    parser.add_argument("-v", "--verbose", help="increase output verbosity",
                        action="store_true")

    args = parser.parse_args()
    if args.verbose:
        logging.basicConfig(level=logging.DEBUG)

    logging.info('Shown in debug and info mode')
    logging.debug('Only shown in debug mode')


if __name__ == "__main__":
    logging.info('Starting script!')
    main()
Run Code Online (Sandbox Code Playgroud)

从终端运行此脚本 aspython -m verbose -v不会打印任何内容。

如果您logging.info('Starting script!')将文件中的行注释为

if __name__ == "__main__":
    #logging.info('Starting script!')
    main()
Run Code Online (Sandbox Code Playgroud)

然后日志记录按预期工作。

看起来logging.info()basicConfig定义之前调用 a 的尝试将完全禁用任何日志记录。 …

python logging python-logging

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

basicConfig 只能用于根记录器,而处理程序/格式化器只能用于命名记录器吗?

我正在使用日志记录并有一个问题。

我知道有简单和高级的日志概念。

在简单日志中,我们有logging.info()等,而在高级日志中,我们有logging.getlogger(some_name).

在简单日志记录中,我们可以使用配置日志路径和消息格式,logging. basicConfig而在高级日志记录的情况下,我们有格式化程序的概念,处理程序分配给通过使用获得的记录器logging.getlogger(some_name).addhandlers..

我们甚至可以使用以下方法向根记录器添加多个处理程序 logging.getlogger().addhandlers....

因此,高级日志记录的唯一好处是我们可以将记录器名称添加到硬编码值或__name__相应的模块值中。

那么既然格式化程序和处理程序都可以用于简单和高级日志记录方法,那么简单意味着根记录器和高级意味着模块名称记录器吗?

basicConfig 只能用于根记录器,而处理程序/格式化器只能用于命名记录器吗?

python python-3.x python-logging

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

如何检查 Docker 容器微服务中的 python-logging 日志

我刚刚开始使用 Docker。

我正在开发另一个开发人员编码的项目。在项目 Docker 容器中,我有三个微服务(aggregatore、classificatore、testmicro),每个服务都使用 python 模块logging进行调试。

我的问题是我不知道在哪里可以查看输出logging

docker-compose.yml

version: '2.1'
services:
  files:
    image: busybox
    volumes:
     [..]

  grafana:
     [..]

  prometheus:
     [..]

  aggregatore:
   [..] 

  classificatore:
    build: classificatore/.
    volumes:    
      - [..]
    volumes_from: 
      - files
    ports: 
      - [..]
    command: ["python", "/src/main.py"]
    depends_on: 
      rabbit:
        condition: service_healthy

  testmicro:
    [..]    
  rabbit:
    [..]
Run Code Online (Sandbox Code Playgroud)

我是终端,我运行

$docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

这将启动所有微服务。

让我们关注分类器服务。

分类器/Dockerfile

FROM python:3
RUN mkdir /src
ADD requirements.txt /src/.
WORKDIR /src
RUN pip install -r requirements.txt
ADD . /src/.
RUN mkdir -p /tmp/reqdoc
CMD …
Run Code Online (Sandbox Code Playgroud)

python docker docker-compose python-logging

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