Merge pull request #15496 from pedrolopes9-7/BAEL-6766
BAEL-6577 Structured Logging
This commit is contained in:
commit
1b1d27ffd9
43
logging-modules/logging-techniques/pom.xml
Normal file
43
logging-modules/logging-techniques/pom.xml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<artifactId>logging-modules</artifactId>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<artifactId>logging-techniques</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>2.0.9</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.logstash.logback</groupId>
|
||||||
|
<artifactId>logstash-logback-encoder</artifactId>
|
||||||
|
<version>7.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-classic</artifactId>
|
||||||
|
<version>1.4.14</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
<artifactId>logback-core</artifactId>
|
||||||
|
<version>1.4.14</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.baeldung.structuredlogging;
|
||||||
|
|
||||||
|
public class User {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String name;
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
public User(String id, String name, String password) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
<configuration>
|
||||||
|
<appender name="jsonConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
|
||||||
|
<includeCallerData>true</includeCallerData>
|
||||||
|
<jsonGeneratorDecorator class="net.logstash.logback.decorate.CompositeJsonGeneratorDecorator">
|
||||||
|
<decorator class="net.logstash.logback.decorate.PrettyPrintingJsonGeneratorDecorator"/>
|
||||||
|
<decorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
|
||||||
|
<defaultMask>XXXX</defaultMask>
|
||||||
|
<path>password</path>
|
||||||
|
</decorator>
|
||||||
|
</jsonGeneratorDecorator>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="jsonConsoleAppender"/>
|
||||||
|
</root>
|
||||||
|
|
||||||
|
</configuration>
|
@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
import com.baeldung.structuredlogging.User;
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import static net.logstash.logback.argument.StructuredArguments.kv;
|
||||||
|
|
||||||
|
public class StructuredLog4jExampleUnitTest {
|
||||||
|
|
||||||
|
Logger logger = LoggerFactory.getLogger("logger_name_example");
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenInfoLoggingData_thenFormatItCorrectly() {
|
||||||
|
User user = new User("1", "John Doe", "123456");
|
||||||
|
|
||||||
|
logger.atInfo().setMessage("Processed user succesfully")
|
||||||
|
.addKeyValue("user_info", user)
|
||||||
|
.log();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenStructuredLog_whenUseLog4j_thenExtractCorrectInformation() {
|
||||||
|
User user = new User("1", "John Doe", "123456");
|
||||||
|
|
||||||
|
try {
|
||||||
|
throwExceptionMethod();
|
||||||
|
} catch (RuntimeException ex) {
|
||||||
|
logger.atError().addKeyValue("user_info", user)
|
||||||
|
.setMessage("Error processing given user")
|
||||||
|
.addKeyValue("exception_class", ex.getClass().getSimpleName())
|
||||||
|
.addKeyValue("error_message", ex.getMessage())
|
||||||
|
.log();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void throwExceptionMethod() {
|
||||||
|
throw new RuntimeException("Error saving user data", new AssertionError());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Configuration status="INFO">
|
||||||
|
<Appenders>
|
||||||
|
<Console name="ConsoleAppender" target="SYSTEM_OUT">
|
||||||
|
<JsonLayout compact="true" eventEol="true" objectMessageAsJsonObject="true" properties="true"/>
|
||||||
|
</Console>
|
||||||
|
</Appenders>
|
||||||
|
|
||||||
|
<Loggers>
|
||||||
|
<Root level="INFO">
|
||||||
|
<AppenderRef ref="stdout"/>
|
||||||
|
</Root>
|
||||||
|
</Loggers>
|
||||||
|
</Configuration>
|
Loading…
x
Reference in New Issue
Block a user