У нас есть приложение весенней загрузки, и мы используем logback с обновляемыми файлами для создания json и стандартных файлов журнала.
Мы используем filebeat для очистки журнала. json файлы и pu sh для сервер elk
Я хотел бы добавить файл оп. json custom json в журнал. Это для сбора информации о вызываемых операциях и перфомных данных.
По сути, я просто хочу использовать класс, который управляет переходящими файлами. В классе будет функция logOp, которая принимает объект java и сериализует его, добавляет некоторые стандартные поля журнала к выводу json.
Вопросы: 1) {Не связно, но будет быть хорошим} есть ли в logback функциональность, которая позволит мне создать именованный регистратор, который добавит строку (сериализованную JSON в моем случае) в конец файла журнала op. json и реализует функциональность скользящего регистратора
2) если это не доступно через logback (что я бы понял). Существует ли пакет java, который управляет добавлением строки в скользящий файл? Я мог бы просто создать экземпляр этого «Appender» и добавить к нему строки. Это было бы похоже на автономный аппликатор Rolling file в logback
Моя цель заключается в создании простого JSON файла, который можно либо непосредственно просматривать, и / или очищать с помощью filebeat, и отправлять в logsta sh. для создания инструментальных панелей для выполнения операций.
-------------------- Конфигурирование для spring-boot-logger.log и spring-boot-logger. json files {for log.debug («my log message}», включает в себя «сыщик» ----------
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProperty scope="context" name="site" source="ci2.application"/>
<springProperty scope="context" name="app" source="spring.application.name"/>
<property name="LOGS" value="./logs" />
<!-- You can override this to have a custom pattern -->
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<!-- Appender to log to console -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- Minimum logging level to be presented in the console logs-->
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<appender name="RollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/spring-boot-logger.log</file>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily and when the file reaches 10 MegaBytes -->
<fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<appender name="Json"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/spring-boot-logger.json</file>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"severity": "%level",
"service": "${app:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"parent": "%X{X-B3-ParentSpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message",
"schema":"ci2",
"group":"devops",
"site": "${site}"
}
</pattern>
</pattern>
</providers>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily and when the file reaches 10 MegaBytes -->
<fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.json
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!-- LOG everything at INFO level -->
<root level="warn">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
<appender-ref ref="Json" />
</root>
<!-- LOG everything at INFO level -->
<root name="org.springframework" level="info">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
<appender-ref ref="Json" />
</root>
<!-- LOG "com.siemens.pl*" at INFO level -->
<logger name="com.siemens.pl" level="info" additivity="false">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
<appender-ref ref="Json" />
</logger>
- --------------- Завершить настройку входа в систему -------------------------------- -
Я пытаюсь динамически добавлять значения в журнал json.
Что-то вроде
1) Поддержка наивысшего уровня, добавить значения из карты как JSON записи в сгенерированных json
something like
Map myValues = new HashMap<String,String> ();
myValues.put("startTime",startTime);
myValues.put("endTime",endTime);
myValues.put("op",operation);
myValues.put("user",user);
// ideal usage format, would add map as "key":"value" to json output
log.debug(myValues);
2) Если добавить сгенерированную пользователем строчку в файл журнала (при этом ничего не добавляется при ведении журнала), я могу создать строку журнала (json myKeys + stander logging), а затем добавить
Map myValues = new HashMap<String,String> ();
myValues.put("startTime",startTime);
myValues.put("endTime",endTime);
myValues.put("op",operation);
myValues.put("user",user);
#Generate JSON String that includes standard logging fields and dynamic
# user fileds passed in myValues map
String myLogStringToAppendToLogFile = generateLogString(myValues);
#Ideal op would accept string and append user provide string to end of
#logfile with no modification
log.debug("RawString", myLogStringToAppendToLogFile );
log.debug(myValues);
Выше будет наиболее сим Я не уверен, что в логгере есть API, который бы принимал карту и добавлял в лог
Другой вариант для логгера - добавить фиксированный набор свойств в файл json и значение свойства может быть передано в строке журнала пользователя.
Например, из определения logback выше -------------------
<appender name="Json"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGS}/spring-boot-logger.json</file>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"severity": "%level",
"service": "${app:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"parent": "%X{X-B3-ParentSpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message",
"schema":"ci2",
"group":"devops",
"site": "${site}"
}
</pattern>
</pattern>
</providers>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily and when the file reaches 10 MegaBytes -->
<fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.json
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
-----------------------
In this appender def, the <pattern> is used to add values to the json def for sleuth.
How can I define entries in this pattern and pass in the dynamic value to the logger. It looks possible and sleuth may do it with
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"parent": "%X{X-B3-ParentSpanId:-}",
"exportable": "%X{X-Span-Export:-}",
Еще один API, который будет работать, заключается в том, что регистратор примет строку и добавит предоставленную пользователем строку в конец файла журнала