Как распознать бизнес-журнал из журнала приложений Spring и отметить его в Logger.info ()? - PullRequest
0 голосов
/ 28 июня 2018

Я использую Spring Boot и Logback для записи моего журнала.

Требуется, чтобы я хотел распознать бизнес-журнал из журнала приложений Spring и отметить его в Logger.info ().

Например:

В одном из моих сервисов Foo.service

LOGGER.info("this is my business log, I want to tag it")

Я хочу отличить его от системного журнала приложения и журнала промежуточного программного обеспечения. Тем не менее, я не могу понять метод, чтобы судить журнал написан мной (программист бизнес-логики) или системный журнал приложения.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Чтобы избежать написания повторяющегося кода (например, добавление префикса или маркера к каждому сообщению), вы можете создать свой собственный простой класс-оболочку:

public class BusinessLogger {
    private final Logger logger; // initialize in constructor, can even add a getter if needed

    public void info(String msg) {
        logger.info("[BUSINESS] " + msg);
    }
}

Использование:

// class member, can even be static
BusinessLogger logger = new BusinessLogger(LoggerFactory.getLogger(this.getClass()));

// in a method
logger.info("this is my business log")

Выход:

[2019-02-13 13:41:21.009] [INFO] 12540 [Test worker] : [BUSINESS] this is my business log

Это будет хорошо работать, если вы все равно хотите, чтобы все ваши журналы были бизнес-журналами. Если вы все еще должны использовать оригинальный регистратор, вы можете сделать logger.getLogger().info("non-business info");, давая:

[2019-02-13 13:41:22.414] [INFO] 12540 [Test worker] : non-business info
0 голосов
/ 28 июня 2018

Обычный подход заключается в том, что каждый используемый вами объект Logger имеет имя. Чаще всего существует один объект Logger на класс, и вы даете ему имя, совпадающее с классом, в котором он находится. Если ваша бизнес-логика находится в определенном пакете, все эти регистраторы имеют одинаковый префикс, и вы можете установить любое конфигурацию журналов, которую вы хотите, направляя эти журналы в отдельный файл или что-то еще, что вы пытаетесь сделать.

Если вы ищете что-то более сложное, чем подход, подход SLF4J / Logback будет использовать маркеры :

Marker businessNotification = MarkerFactory.getMarker("BUSINESS_NOTIFICATION");
Logger logger = LoggerFactory.getLogger("aLogger");
//…
logger.info(businessNotification, "this is my business log")

Затем можно использовать маркер% в Logback's PatternLayout или выполнить более сложную фильтрацию по маркеру.

...