1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jeffreyning-nh-aop-logging

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Данный проект основан на AOP-Logging.

Были добавлены следующие метки:

  • Идентификатор клиентского запроса: %X{ReqId}. Необходимо настроить фильтр.
  • Время выполнения метода: %X{elapsedTime}.
  • Идентификатор бизнес-модуля: %X{bizModule}. Требуется настройка @LogModule.
  • Текущий пользователь, вошедший в систему: %X{userId}. Нужно настроить фильтр и реализовать интерфейс для получения userId.
  • Класс вызова: %X{callingClass}.
  • Метод вызова: %X{callingMethod}.

Ссылка на jar:

<dependency>
    <groupId>com.github.jeffreyning</groupId>
    <artifactId>nh-aop-logging</artifactId>
    <version>1.0.1</version>
</dependency>

В springboot-проекте также необходимо напрямую или косвенно импортировать:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

Если требуется выводить логи в формате JSON, то также нужно импортировать:

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>5.0</version>
</dependency>               

Инициализация журнала AOP:

@EnableAspectJAutoProxy
public class LoggerConfig {

    private static final boolean SKIP_NULL_FIELDS = true;
    private static final int CROP_THRESHOLD = 7;
    private static final Set<String> EXCLUDE_SECURE_FIELD_NAMES = Collections.<String>emptySet();

    @Bean
    public AOPLogger getLoggerBean() {
        AOPLogger aopLogger = new AOPLogger();
        aopLogger.setLogAdapter(new UniversalLogAdapter(SKIP_NULL_FIELDS, CROP_THRESHOLD, EXCLUDE_SECURE_FIELD_NAMES));
        return aopLogger;
    }
}

Настройка фильтра: Внедрение пользовательского класса для получения userId, поддерживающего получение ReqId и userId:

@Bean
public FilterRegistrationBean getDemoFilter() {
    ReqIdFilter reqIdFilter = new ReqIdFilter();
    reqIdFilter.setUserInfoLog(new UserInfoLog() {
        @Override
        public String getUserId() {
            //пользовательская логика для получения userid
            return "admin";
        }
    });
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(reqIdFilter);
    List<String> urlPatterns = new ArrayList<String>();
    urlPatterns.add("/*");
    registrationBean.setUrlPatterns(urlPatterns);
    registrationBean.setOrder(100);
    return registrationBean;
}

На контроллере или методе можно использовать аннотации:

  • @LogInfo — для записи информационного журнала интерфейса.
  • @LogException — для записи журнала исключений интерфейса.
  • @LogModule — для установки идентификатора бизнес-модуля.

Пример контроллера:

@RequestMapping("/test")
@LogInfo
@LogException
@LogModule("system")
public class TestCtl {

    @GetMapping("/query")
    public Map query(String echo){
        Map retMap=new HashMap();
        retMap.put("status",0);
        retMap.put("msg", "success");
        retMap.put("data", echo);
        return retMap;
    }

    @GetMapping("/createException")
    public Map createException(String echo){
        Map retMap=null;
        retMap.put("status",0);
        retMap.put("msg", "success");
        retMap.put="data", echo;
        return retMap;
    }
}

Конфигурация формата логов:

    <appender name="interfaceConsole" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line]- class=%X{callingClass} method=%X{callingMethod} reqId=%X{reqId} userId=%X{userId} bizModule=%X{bizModule}  elapsedTime=%X{elapsedTime} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

Для вывода логов в формате json, удобном для сбора и анализа elk:

    <appender name="interfaceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logFile}.interface</file>
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <pattern>
                    <pattern>
                        {
                        "project": "log-demo",
                        "timestamp": "%date{\"yyyy-MM-dd'T'HH:mm:ss,SSSZ\"}",
                        "log_level": "%level",
                                "thread": "%thread",
                                "class_name": "%X{callingClass}",
                                "class_method":"%X{callingMethod}",
                                "message": "%message",
                                "req_id":

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/jeffreyning-nh-aop-logging.git
git@gitlife.ru:oschina-mirror/jeffreyning-nh-aop-logging.git
oschina-mirror
jeffreyning-nh-aop-logging
jeffreyning-nh-aop-logging
master