Вот код моего очень простого приложения Springboot:
Код: Выделить всё
@SpringBootApplication
public class QuestionApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(QuestionApplication.class, args);
HelloWorld helloWorld = new HelloWorld();
HelloWorld.createLogs();
}
}
Код: Выделить всё
public class HelloWorld {
private static final Logger logger = LoggerFactory.getLogger(HelloWorld.class);
public static void createLogs() throws JsonProcessingException {
int k = 0;
boolean b = true;
while (b) {
try{
if(Math.random() > 0.5){
logger.info("ISSUE HERE -> custom logs and send log messages to Kafka topic at " +
DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now()));
int i = 2 / 0;
b = k < Integer.MAX_VALUE;
Thread.sleep(1000);
} else{
}
} catch (Exception re){
throw new RuntimeException("ISSUE HERE (custom log) error in try " + k, re);
} finally {
try {
int j = 2 / 0;
} catch (Exception e) {
logger.error("ISSUE HERE (custom log) error in finally " + k, e);
}
}
k++;
}
}
}
С помощью приведенного выше кода в первом проекте мне нужно отправить журналы в тему Kafka.
Чтобы сделать Итак, я использую следующие зависимости:
Код: Выделить всё
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-logging
org.springframework.boot
spring-boot-starter-log4j2
org.springframework.boot
spring-boot-starter-web
org.apache.kafka
kafka-clients
org.apache.kafka
kafka-log4j-appender
org.apache.logging.log4j
log4j-layout-template-json
Код: Выделить всё
{
"some field": "1.0",
"parameters": {
"class": "%logger",
"message": "%message"
}
}
localhost:9093
Под всеми журналами я имею в виду мои собственные журналы (из logger.info()) и Springboot. журналы
Проект ДВА с только logback + приложением loki
С помощью того же Java-кода, что и выше, во втором проекте мне нужно отправить журналы в экземпляр loki.
Чтобы сделать Итак, я использую следующие зависимости:
Код: Выделить всё
com.github.loki4j
loki-logback-appender
1.6.0-m1
io.micrometer
micrometer-core
Код: Выделить всё
%d{yyyy-MM-dd HH:mm:ss} ${PID} %-5level --- [%thread] [${name},%X{traceId:-},%X{spanId:-}] %logger{36} : %msg%n
true
https://logs-prod-006.grafana.net/loki/api/v1/push
813123
123
name=${name},host=${HOSTNAME},level=%level,pid=${PID},thread=%thread
true
{
"somefield":"1.0",
"playload": {
"pid":"${PID}",
"class":"%logger",
"thread":"%thread",
"traceId":"%X{traceId}",
"spanId":"%X{spanId}",
"message":"%message"
}
}
true
false
Под всеми журналами я имею в виду мои собственные журналы (из logger.info()) и журналы Springboot.
Теперь в проекте ТРИ мне нужно объединить оба, мне нужно отправлять свои логи и в Кафку, и в Локи.
Поэтому я добавил оба log4j2.xml и logback-spring.xml в папку ресурсов.
Я объединил все зависимости в один pom и запустил программу.
Я ожидал увидеть все журналы в обоих местах.
Однако результаты:
- Все журналы (logger.info()) журналы + журналы Springboot по умолчанию находятся в графане loki
Но в теме kafka представлены только журналы Springboot по умолчанию, а пользовательские журналы отсутствуют.
Код: Выделить всё
2024-12-13T04:35:32.364+08:00 INFO 4394 --- [ main] [ ] org.example.EventApplication : No active profile set, falling back to 1 default profile: "default"
Что сделать, чтобы я мог видеть все логи в обоих местах?
Подробнее здесь: https://stackoverflow.com/questions/792 ... when-using
Мобильная версия