这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion logging-modules/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<module>tinylog2</module>
<module>logging-techniques</module>
<module>solarwinds-loggly</module>
<module>splunk-with-log4j2</module>
</modules>

</project>
</project>
76 changes: 76 additions & 0 deletions logging-modules/splunk-with-log4j2/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @JavierPeris ,
I was getting conflicts in the build due to other loggers because there are other submodules in which they have other loggers already (other than log4j2).

Error for reference:
SLF4J(W): Class path contains multiple SLF4J providers. SLF4J(W): Found provider [org.apache.logging.slf4j.SLF4JServiceProvider@64711bf2] SLF4J(W): Found provider [ch.qos.logback.classic.spi.LogbackServiceProvider@169da7f2] SLF4J(W): See https://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J(I): Actual provider is of type [org.apache.logging.slf4j.SLF4JServiceProvider@64711bf2]

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/>
</parent>
<groupId>com.splunk</groupId>
<artifactId>log4j</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>log4j</name>
<description>Demo project for Splunk with Spring Boot</description>
<properties>
<java.version>17</java.version>
<splunk-logging.version>1.8.0</splunk-logging.version>
</properties>

<repositories>
<repository>
<id>splunk-artifactory</id>
<name>Splunk Releases</name>
<url>https://splunk.jfrog.io/splunk/ext-releases-local</url>
</repository>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo1.maven.org/maven2/</url>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.splunk.logging</groupId>
<artifactId>splunk-library-javalogging</artifactId>
<version>${splunk-logging.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.splunk.log4j;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Log4jApplication {

public static void main(String[] args) {
SpringApplication.run(Log4jApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.splunk.log4j.controller;

import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.splunk.log4j.dto.Student;
import com.splunk.log4j.service.StudentService;

@RestController
@RequestMapping("students")
public class StudentController {

private final StudentService studentService;

public StudentController(StudentService studentService) {
this.studentService = studentService;
}

@PostMapping
public Student addStudent(@RequestBody Student student) {
return studentService.addStudent(student);
}

@GetMapping
public List<Student> getStudents() {
return studentService.getStudents();
}

@GetMapping("{rollNumber}")
public Student getStudent(@PathVariable("rollNumber") int rollNumber) {
return studentService.getStudent(rollNumber);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.splunk.log4j.dto;

import java.util.Objects;

public class Student {

private String name;

private int rollNumber;

public Student() {
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getRollNumber() {
return rollNumber;
}

public void setRollNumber(int rollNumber) {
this.rollNumber = rollNumber;
}

@Override
public String toString() {
return "Student{" + "name='" + name + '\'' + ", rollNumber=" + rollNumber + '}';
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}

Student student = (Student) o;

if (rollNumber != student.rollNumber) {
return false;
}
return Objects.equals(name, student.name);
}

@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + rollNumber;
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.splunk.log4j.service;

import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;
import com.splunk.log4j.dto.Student;

@Service
public class StudentService {

private static final Logger logger = LogManager.getLogger(StudentService.class);

private final List<Student> students = new ArrayList<>();

public Student addStudent(Student student) {
logger.info("addStudent: adding Student");
logger.info("addStudent: Request: {}", student);
students.add(student);
logger.info("addStudent: added Student");
logger.info("addStudent: Response: {}", student);
return student;
}

public List<Student> getStudents() {
logger.info("getStudents: getting Students");
List<Student> studentsList = students;
logger.info("getStudents: got Students");
logger.info("getStudents: Response: {}", studentsList);
return studentsList;
}

public Student getStudent(int rollNumber) {
logger.info("getStudent: getting Student");
logger.info("getStudent: Request: {}", rollNumber);
Student student = students.stream()
.filter(stu -> stu.getRollNumber() == rollNumber)
.findAny()
.orElseThrow(() -> new RuntimeException("Student not found"));
logger.info("getStudent: got Student");
logger.info("getStudent: Response: {}", student);
return student;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
spring.application.name=log4j
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout
pattern="%style{%d{ISO8601}} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{10}}{bright,yellow}: %msg%n%throwable"/>
</Console>
<SplunkHttp
name="splunkhttp"
url="http://localhost:8088"
token="11806291-7e0e-422a-a083-abfdd4b2eb74"
host="localhost"
index="student_api_dev"
type="raw"
source="student-http-events"
sourcetype="log4j"
messageFormat="text"
disableCertificateValidation="true">
<PatternLayout pattern="%m"/>
</SplunkHttp>
</Appenders>

<Loggers>
<Root level="info">
<AppenderRef ref="console"/>
<AppenderRef ref="splunkhttp"/>
</Root>
</Loggers>
</Configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.splunk.log4j.controller;

import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.splunk.log4j.dto.Student;
import com.splunk.log4j.service.StudentService;

@WebMvcTest(StudentController.class)
class StudentControllerUnitTest {

@Autowired
private MockMvc mockMvc;

@MockBean
private StudentService studentService;

@Autowired
private ObjectMapper objectMapper;

@Test
void whenAddStudentCalled_thenReturnSuccessAndAddedStudent() throws Exception {
Student student = new Student();
student.setName("Ram");
student.setRollNumber(3);

when(studentService.addStudent(student)).thenReturn(student);

mockMvc.perform(post("/students").contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(student)))
.andExpect(status().isOk())
.andExpect(content().json(objectMapper.writeValueAsString(student)))
.andReturn();
}

@Test
void whenGetStudentCalled_thenReturnStudentByIndex() throws Exception {
Student student = new Student();
student.setName("Ram");
student.setRollNumber(4);

when(studentService.getStudent(0)).thenReturn(student);

mockMvc.perform(get("/students/0"))
.andExpect(status().isOk())
.andExpect(content().json(objectMapper.writeValueAsString(student)));
}

@Test
void whenGetStudentsCalled_thenReturnListOfStudent() throws Exception {
Student student = new Student();
student.setName("Ram");
student.setRollNumber(4);

Student student2 = new Student();
student.setName("Sham");
student.setRollNumber(3);

when(studentService.getStudents()).thenReturn(List.of(student, student2));

mockMvc.perform(get("/students"))
.andExpect(status().isOk())
.andExpect(content().json(objectMapper.writeValueAsString(List.of(student, student2))));
}
}
Loading