Arhn - архитектура программирования

Как создать регистратор Python с номером записи в файле журнала

Я пытаюсь создать регистратор Python, используя модуль ведения журнала. Как я могу создать несколько регистраторов для нескольких файлов, чтобы первый символ был номером записи? используя форматтер, я не нашел, как это сделать

formatter=logging.Formatter('%(recored_number)s %(asctime)s %(message)s %(name)s')

Вот как я хотел, чтобы файлы были:

Первый файл журнала:

#1 2019-09-05 08:55:10,000 first logger line for log 1 INFO logger
#2 2019-09-05 08:55:20,000 second logger line for log 1 INFO logger

Второй файл журнала:

#1 2019-09-05 08:58:10,000 first logger line for log 2 INFO logger
#2 2019-09-05 08:58:20,000 second logger line for log 2 INFO logger
05.09.2019

Ответы:


1

Аналогичное поведение достигается в этом вопросе

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

Для этой цели вы можете добавить одноэлементный класс RecordCounter.

import logging

class RecordCounter:
    _instance = None
    _count = 0

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = object.__new__(cls, *args, **kwargs)
        return cls._instance

    def count(self):
        self._count += 1
        return self._count

class ContextFilter(logging.Filter):
    def filter(self, record):
        record.record_number = RecordCounter().count()
        return True

logging.basicConfig(
    level=logging.DEBUG,
    format='%(record_number)s %(asctime)s %(message)s %(name)s')
logger = logging.getLogger(__name__)
logger.addFilter(ContextFilter())


05.09.2019
  • Спасибо ! это как раз то, что я искал 05.09.2019
  • Спасибо за предыдущий ответ, я хотел бы создать несколько файлов журнала, чтобы счетчик был для каждого файла журнала. как я могу подсчитать количество записей журнала в файле журнала? 08.09.2019
  • Обычно разные выходные данные журнала обрабатываются logging.Handler экземплярами. Вы можете создать подкласс logging.Handler, чтобы создать собственный обработчик, который будет добавлять record_number к каждой записи. Таким образом, синглтон здесь непригоден, так как вы будете считать записи для каждого экземпляра обработчика. Кроме того, Handler имеет метод filter(), как и logging.Filter, так что вы можете легко переопределить его, чтобы добавить record_number внутри обработчика, вообще не используя logging.Filter. 09.09.2019

  • 2

    Я только что нашел ответ, используя дополнительные данные для каждой записи журнала:

    formatter=logging.Formatter('%(recored_number)s %(asctime)s %(message)s %(name)s')
    
    log_1_counter=1
    log_2_counter=1
    log1.info('first logger line for log 1',extra=
    {'record_number':str(log_1_counter)})
    log_1_counter+=1
    
    log_1_counter=1
    log_2_counter=1
    log1.info('first logger line for log 1',extra= 
    {'record_number':str(log_1_counter)})
    log_1_counter+=1
    log1.info('second logger line for log 1',extra= 
    {'record_number':str(log_1_counter)})
    log2.info('first logger line for log 2',extra= 
    {'record_number':str(log_2_counter)})
    log_2_counter+=2
    log2.info('second logger line for log 2',extra= 
    {'record_number':str(log_2_counter)})
    

    Это, вероятно, не лучшее решение, но оно работает для меня.

    08.09.2019
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..