Как одинаково отформатировать записи журнала, созданные одной и той же функцией - PullRequest
0 голосов
/ 07 апреля 2020

Можно ли отформатировать все записи журнала, созданные в результате выполнения определенной функции таким же образом?

Например, вместо:

import requests
import logging

logging.basicConfig(level=logging.DEBUG)


def foo():
    logging.info("Running foo")
    requests.get("http://www.google.com")


def bar():
    logging.info("Running bar")
    requests.get("http://www.google.com")


foo()
bar()

давая:

INFO:root:Running foo
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): www.google.com:80
DEBUG:urllib3.connectionpool:http://www.google.com:80 "GET / HTTP/1.1" 200 5499
INFO:root:Running bar
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): www.google.com:80
DEBUG:urllib3.connectionpool:http://www.google.com:80 "GET / HTTP/1.1" 200 5470

Я хочу что-то вроде:

foo | INFO:root:Running foo
foo | DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): www.google.com:80
foo | DEBUG:urllib3.connectionpool:http://www.google.com:80 "GET / HTTP/1.1" 200 5499
bar | INFO:root:Running bar
bar | DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): www.google.com:80
bar | DEBUG:urllib3.connectionpool:http://www.google.com:80 "GET / HTTP/1.1" 200 5470

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Вывод будет выглядеть по-другому, так как имя функции будет перезаписано именем вызываемой функции, как показано на рисунке ниже.

    import requests
    import logging
    logger = logging.getLogger()
    FORMAT = "%(funcName)20s | %(levelname)s:%(name)s: %(message)s"
    logging.basicConfig(format=FORMAT)
    logger.setLevel(logging.DEBUG)


def foo():
    logging.info(f"Starting {foo.__name__}")
    requests.get("http://www.google.com")



def bar():
    logging.info(f"Starting {bar.__name__}")
    requests.get("http://www.google.com")


foo()
bar()

Вывод:

             foo | INFO:root: Starting foo
       _new_conn | DEBUG:urllib3.connectionpool: Starting new HTTP connection (1): www.google.com:80
   _make_request | DEBUG:urllib3.connectionpool: http://www.google.com:80 "GET / HTTP/1.1" 200 5778
             bar | INFO:root: Starting bar
       _new_conn | DEBUG:urllib3.connectionpool: Starting new HTTP connection (1): www.google.com:80
   _make_request | DEBUG:urllib3.connectionpool: http://www.google.com:80 "GET / HTTP/1.1" 200 5745
0 голосов
/ 07 апреля 2020

То, что вы ищете, это форматеры. Они встроены в модуль регистрации.

import logging

FORMAT = "%(funcName)s - %(asctime)s - %(levelname)s - %(message)s"

logging.basicConfig(format=FORMAT, level=logging.DEBUG)

def foo():
    logging.info("In foo")

def bar():
    logging.info("In bar")

foo()
bar()

Вывод завещания:

foo - 2020-04-07 17:55:07,125 - INFO - In foo
bar - 2020-04-07 17:55:07,132 - INFO - In bar

В документах все объясняется. Вы можете добавить все виды пользовательских выходных данных к каждому вызову регистрации.

...