initial structure and tests
This commit is contained in:
parent
e5e8ecf27d
commit
de84049dc0
|
@ -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…
Reference in New Issue