Skip to content

Commit 7f7377a

Browse files
authored
Use log4j2 and slf4j properly, add maven-dependency plugin (#149)
## Description This PR use slf4j properly in our implementation. It will now allows to users to specify their own logger implementation. In the tests we use log4j-slf4j2-impl. I also added maven-dependency-plugin to remove unneeded dependencies ## Type of Change * Bug fix (non-breaking change which fixes an issue) ## Checklist - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit/integration tests pass locally with my changes Signed-off-by: Jakub Stejskal <xstejs24@gmail.com>
1 parent e5f03b5 commit 7f7377a

File tree

23 files changed

+333
-94
lines changed

23 files changed

+333
-94
lines changed

pom.xml

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
<maven.compiler.release>17</maven.compiler.release>
7575

7676
<fabric8.version>6.13.1</fabric8.version>
77-
<log4j.version>2.17.2</log4j.version>
77+
<log4j.version>2.23.1</log4j.version>
7878
<slf4j.version>2.0.13</slf4j.version>
7979

8080
<!-- TEST dependencies -->
@@ -85,6 +85,7 @@
8585
<spotbugs.version>4.8.6</spotbugs.version>
8686
<maven.spotbugs.version>4.8.6.2</maven.spotbugs.version>
8787
<maven.checkstyle.version>3.4.0</maven.checkstyle.version>
88+
<maven.dependency.version>3.3.0</maven.dependency.version>
8889

8990
<maven.compile.plugin.version>3.13.0</maven.compile.plugin.version>
9091
<maven.source.plugin.version>3.3.1</maven.source.plugin.version>
@@ -189,7 +190,7 @@
189190
</dependency>
190191
<dependency>
191192
<groupId>org.apache.logging.log4j</groupId>
192-
<artifactId>log4j-slf4j-impl</artifactId>
193+
<artifactId>log4j-slf4j2-impl</artifactId>
193194
<version>${log4j.version}</version>
194195
</dependency>
195196
<dependency>
@@ -292,6 +293,45 @@
292293
</execution>
293294
</executions>
294295
</plugin>
296+
<plugin>
297+
<groupId>org.apache.maven.plugins</groupId>
298+
<artifactId>maven-dependency-plugin</artifactId>
299+
<version>${maven.dependency.version}</version>
300+
<executions>
301+
<execution>
302+
<id>copy-dependencies</id>
303+
<phase>none</phase>
304+
<goals>
305+
<goal>copy-dependencies</goal>
306+
</goals>
307+
<configuration>
308+
<includeScope>runtime</includeScope>
309+
<outputDirectory>${project.build.directory}/lib</outputDirectory>
310+
<prependGroupId>true</prependGroupId>
311+
<overWriteReleases>false</overWriteReleases>
312+
<overWriteSnapshots>false</overWriteSnapshots>
313+
<overWriteIfNewer>true</overWriteIfNewer>
314+
</configuration>
315+
</execution>
316+
<execution>
317+
<id>set-classpath</id>
318+
<phase>none</phase>
319+
<goals>
320+
<goal>build-classpath</goal>
321+
</goals>
322+
<configuration>
323+
<includeScope>runtime</includeScope>
324+
<outputProperty>project.dist.classpath</outputProperty>
325+
<attach>false</attach>
326+
<prefix>lib</prefix>
327+
<prependGroupId>true</prependGroupId>
328+
<overWriteReleases>false</overWriteReleases>
329+
<overWriteSnapshots>false</overWriteSnapshots>
330+
<overWriteIfNewer>true</overWriteIfNewer>
331+
</configuration>
332+
</execution>
333+
</executions>
334+
</plugin>
295335
<plugin>
296336
<artifactId>maven-source-plugin</artifactId>
297337
<version>${maven.source.plugin.version}</version>
@@ -474,4 +514,4 @@
474514
</build>
475515
</profile>
476516
</profiles>
477-
</project>
517+
</project>

test-frame-common/pom.xml

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,20 +71,28 @@
7171
</dependency>
7272
<dependency>
7373
<groupId>io.fabric8</groupId>
74-
<artifactId>openshift-client</artifactId>
74+
<artifactId>kubernetes-model-core</artifactId>
7575
</dependency>
7676
<dependency>
7777
<groupId>io.fabric8</groupId>
78-
<artifactId>kubernetes-client</artifactId>
78+
<artifactId>kubernetes-model-extensions</artifactId>
7979
</dependency>
8080
<dependency>
8181
<groupId>io.fabric8</groupId>
82-
<artifactId>kubernetes-model</artifactId>
82+
<artifactId>kubernetes-model-apps</artifactId>
83+
</dependency>
84+
<dependency>
85+
<groupId>io.fabric8</groupId>
86+
<artifactId>openshift-model-operatorhub</artifactId>
8387
</dependency>
8488
<dependency>
8589
<groupId>org.junit.jupiter</groupId>
8690
<artifactId>junit-jupiter-api</artifactId>
8791
</dependency>
92+
<dependency>
93+
<groupId>org.junit.platform</groupId>
94+
<artifactId>junit-platform-commons</artifactId>
95+
</dependency>
8896
<dependency>
8997
<groupId>io.fabric8</groupId>
9098
<artifactId>kubernetes-server-mock</artifactId>
@@ -94,18 +102,59 @@
94102
<groupId>com.fasterxml.jackson.dataformat</groupId>
95103
<artifactId>jackson-dataformat-yaml</artifactId>
96104
</dependency>
105+
<dependency>
106+
<groupId>com.fasterxml.jackson.core</groupId>
107+
<artifactId>jackson-databind</artifactId>
108+
</dependency>
109+
<dependency>
110+
<groupId>com.fasterxml.jackson.core</groupId>
111+
<artifactId>jackson-core</artifactId>
112+
</dependency>
97113
<!-- Logger -->
98114
<dependency>
99115
<groupId>org.apache.logging.log4j</groupId>
100116
<artifactId>log4j-api</artifactId>
117+
<scope>test</scope>
101118
</dependency>
102119
<dependency>
103120
<groupId>org.apache.logging.log4j</groupId>
104121
<artifactId>log4j-core</artifactId>
122+
<scope>test</scope>
123+
</dependency>
124+
<dependency>
125+
<groupId>org.slf4j</groupId>
126+
<artifactId>slf4j-api</artifactId>
105127
</dependency>
106128
<dependency>
107129
<groupId>org.apache.logging.log4j</groupId>
108-
<artifactId>log4j-slf4j-impl</artifactId>
130+
<artifactId>log4j-slf4j2-impl</artifactId>
131+
<scope>test</scope>
109132
</dependency>
110133
</dependencies>
111-
</project>
134+
<build>
135+
<pluginManagement>
136+
<plugins>
137+
<plugin>
138+
<groupId>org.apache.maven.plugins</groupId>
139+
<artifactId>maven-dependency-plugin</artifactId>
140+
<version>${maven.dependency.version}</version>
141+
<executions>
142+
<execution>
143+
<id>analyze</id>
144+
<goals>
145+
<goal>analyze-only</goal>
146+
</goals>
147+
<configuration>
148+
<failOnWarning>true</failOnWarning>
149+
<ignoredUnusedDeclaredDependencies>
150+
<!-- Needed for logging in tests used by test-frame (uses SLF4J) -->
151+
<ignoredUnusedDeclaredDependency>org.apache.logging.log4j:log4j-slf4j2-impl</ignoredUnusedDeclaredDependency>
152+
</ignoredUnusedDeclaredDependencies>
153+
</configuration>
154+
</execution>
155+
</executions>
156+
</plugin>
157+
</plugins>
158+
</pluginManagement>
159+
</build>
160+
</project>

test-frame-common/src/main/java/io/skodjob/testframe/clients/KubeClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@
2626
import io.skodjob.testframe.TestFrameConstants;
2727
import io.skodjob.testframe.TestFrameEnv;
2828
import io.skodjob.testframe.executor.Exec;
29-
import org.apache.logging.log4j.LogManager;
30-
import org.apache.logging.log4j.Logger;
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
3131

3232
/**
3333
* Provides functionality to interact with Kubernetes and OpenShift clusters.
3434
* This includes creating clients, reading resources from files, and managing kubeconfig for authentication.
3535
*/
3636
public class KubeClient {
37-
private static final Logger LOGGER = LogManager.getLogger(KubeClient.class);
37+
private static final Logger LOGGER = LoggerFactory.getLogger(KubeClient.class);
3838

3939

4040
private KubernetesClient client;

test-frame-common/src/main/java/io/skodjob/testframe/clients/cmdClient/BaseCmdKubeClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import io.skodjob.testframe.clients.KubeClusterException;
2020
import io.skodjob.testframe.executor.Exec;
2121
import io.skodjob.testframe.executor.ExecResult;
22-
import org.apache.logging.log4j.LogManager;
23-
import org.apache.logging.log4j.Logger;
22+
import org.slf4j.Logger;
23+
import org.slf4j.LoggerFactory;
2424

2525
import static java.lang.String.join;
2626
import static java.util.Arrays.asList;
@@ -32,7 +32,7 @@
3232
*/
3333
public abstract class BaseCmdKubeClient<K extends BaseCmdKubeClient<K>> implements KubeCmdClient<K> {
3434

35-
private static final Logger LOGGER = LogManager.getLogger(BaseCmdKubeClient.class);
35+
private static final Logger LOGGER = LoggerFactory.getLogger(BaseCmdKubeClient.class);
3636

3737
private static final String CREATE = "create";
3838
private static final String APPLY = "apply";

test-frame-common/src/main/java/io/skodjob/testframe/environment/TestEnvironmentVariables.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import com.fasterxml.jackson.databind.ObjectMapper;
99
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
1010
import io.skodjob.testframe.utils.LoggerUtils;
11-
import org.apache.logging.log4j.LogManager;
12-
import org.apache.logging.log4j.Logger;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
1313

1414
import java.io.File;
1515
import java.io.IOException;
@@ -28,7 +28,7 @@
2828
*/
2929
public class TestEnvironmentVariables {
3030

31-
private static final Logger LOGGER = LogManager.getLogger(TestEnvironmentVariables.class);
31+
private static final Logger LOGGER = LoggerFactory.getLogger(TestEnvironmentVariables.class);
3232

3333
/* test */ private final Map<String, String> envMap;
3434
private Map<String, String> values = new HashMap<>();

test-frame-common/src/main/java/io/skodjob/testframe/executor/Exec.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030

3131
import io.fabric8.kubernetes.api.model.EnvVar;
3232
import io.skodjob.testframe.clients.KubeClusterException;
33-
import org.apache.logging.log4j.LogManager;
34-
import org.apache.logging.log4j.Logger;
33+
import org.slf4j.Logger;
34+
import org.slf4j.LoggerFactory;
3535

3636
import static java.lang.String.join;
3737

@@ -40,7 +40,7 @@
4040
*/
4141
public class Exec {
4242

43-
private static final Logger LOGGER = LogManager.getLogger(Exec.class);
43+
private static final Logger LOGGER = LoggerFactory.getLogger(Exec.class);
4444

4545
private static final Pattern ERROR_PATTERN = Pattern.compile("Error from server \\(([a-zA-Z0-9]+)\\):");
4646
private static final Pattern INVALID_PATTERN = Pattern

test-frame-common/src/main/java/io/skodjob/testframe/listeners/TestVisualSeparatorExtension.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
package io.skodjob.testframe.listeners;
66

77
import io.skodjob.testframe.utils.LoggerUtils;
8-
import org.apache.logging.log4j.LogManager;
9-
import org.apache.logging.log4j.Logger;
108
import org.junit.jupiter.api.extension.AfterEachCallback;
119
import org.junit.jupiter.api.extension.BeforeEachCallback;
1210
import org.junit.jupiter.api.extension.ExtensionContext;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
1313

1414
/**
1515
* jUnit5 specific class which listening on test callbacks
1616
*/
1717
public class TestVisualSeparatorExtension implements BeforeEachCallback, AfterEachCallback {
18-
private final Logger logger = LogManager.getLogger(TestVisualSeparatorExtension.class);
18+
private final Logger logger = LoggerFactory.getLogger(TestVisualSeparatorExtension.class);
1919

2020
private TestVisualSeparatorExtension() {
2121
// Private constructor to prevent instantiation

test-frame-common/src/main/java/io/skodjob/testframe/resources/KubeResourceManager.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@
3333
import io.skodjob.testframe.interfaces.NamespacedResourceType;
3434
import io.skodjob.testframe.interfaces.ResourceType;
3535
import io.skodjob.testframe.wait.Wait;
36-
import org.apache.logging.log4j.Level;
37-
import org.apache.logging.log4j.LogManager;
38-
import org.apache.logging.log4j.Logger;
3936
import org.junit.jupiter.api.extension.ExtensionContext;
37+
import org.slf4j.Logger;
38+
import org.slf4j.LoggerFactory;
39+
import org.slf4j.event.Level;
4040

4141
import static org.junit.jupiter.api.Assertions.assertNotNull;
4242
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -45,7 +45,7 @@
4545
* Manages Kubernetes resources for testing purposes.
4646
*/
4747
public class KubeResourceManager {
48-
private static final Logger LOGGER = LogManager.getLogger(KubeResourceManager.class);
48+
private static final Logger LOGGER = LoggerFactory.getLogger(KubeResourceManager.class);
4949

5050
private static KubeResourceManager instance;
5151
private static KubeClient client;
@@ -197,12 +197,12 @@ public final <T extends HasMetadata> void pushToStack(T resource) {
197197
/**
198198
* Logs all managed resources across all test contexts with set log level
199199
*
200-
* @param logLevel log4j2 log level
200+
* @param logLevel slf4j log level event
201201
*/
202202
public void printAllResources(Level logLevel) {
203-
LOGGER.log(logLevel, "Printing all managed resources from all test contexts");
203+
LOGGER.atLevel(logLevel).log("Printing all managed resources from all test contexts");
204204
STORED_RESOURCES.forEach((testName, resources) -> {
205-
LOGGER.log(logLevel, "Context: {}", testName);
205+
LOGGER.atLevel(logLevel).log("Context: {}", testName);
206206
resources.forEach(resourceItem -> {
207207
if (resourceItem.resource() != null) {
208208
LoggerUtils.logResource("Managed resource:", logLevel, resourceItem.resource());
@@ -214,10 +214,10 @@ public void printAllResources(Level logLevel) {
214214
/**
215215
* Logs all managed resources in current test context with set log level
216216
*
217-
* @param logLevel log4j2 log level
217+
* @param logLevel slf4j log level event
218218
*/
219219
public void printCurrentResources(Level logLevel) {
220-
LOGGER.log(logLevel, "Printing all managed resources from current test context");
220+
LOGGER.atLevel(logLevel).log("Printing all managed resources from current test context");
221221
STORED_RESOURCES.get(getTestContext().getDisplayName()).forEach(resourceItem -> {
222222
if (resourceItem.resource() != null) {
223223
LoggerUtils.logResource("Managed resource:", logLevel, resourceItem.resource());

test-frame-common/src/main/java/io/skodjob/testframe/utils/ImageUtils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*/
55
package io.skodjob.testframe.utils;
66

7-
import org.apache.logging.log4j.LogManager;
8-
import org.apache.logging.log4j.Logger;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
99

1010
import java.util.regex.Matcher;
1111
import java.util.regex.Pattern;
@@ -14,7 +14,7 @@
1414
* Class containing methods for handling images
1515
*/
1616
public final class ImageUtils {
17-
private static final Logger LOGGER = LogManager.getLogger(ImageUtils.class);
17+
private static final Logger LOGGER = LoggerFactory.getLogger(ImageUtils.class);
1818

1919
private ImageUtils() {
2020
// Private constructor to prevent instantiation

test-frame-common/src/main/java/io/skodjob/testframe/utils/KubeUtils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
import io.skodjob.testframe.TestFrameConstants;
1212
import io.skodjob.testframe.resources.KubeResourceManager;
1313
import io.skodjob.testframe.wait.Wait;
14-
import org.apache.logging.log4j.LogManager;
15-
import org.apache.logging.log4j.Logger;
14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
1616

1717
/**
1818
* Utility methods for Kubernetes and Openshift clusters.
1919
*/
2020
public final class KubeUtils {
2121

22-
private static final Logger LOGGER = LogManager.getLogger(KubeUtils.class);
22+
private static final Logger LOGGER = LoggerFactory.getLogger(KubeUtils.class);
2323

2424
private KubeUtils() {
2525
// Private constructor to prevent instantiation

test-frame-common/src/main/java/io/skodjob/testframe/utils/LoggerUtils.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@
77
import java.util.Collections;
88

99
import io.fabric8.kubernetes.api.model.HasMetadata;
10-
import org.apache.logging.log4j.Level;
11-
import org.apache.logging.log4j.LogManager;
12-
import org.apache.logging.log4j.Logger;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
12+
import org.slf4j.event.Level;
1313

1414
/**
1515
* Utility methods for logging.
1616
*/
1717
public final class LoggerUtils {
1818

19-
private static final Logger LOGGER = LogManager.getLogger(LoggerUtils.class);
19+
private static final Logger LOGGER = LoggerFactory.getLogger(LoggerUtils.class);
2020
static final String SEPARATOR_CHAR = "#";
2121

2222
/**
@@ -71,11 +71,11 @@ public static <T extends HasMetadata> void logResource(String operation, T resou
7171
*/
7272
public static <T extends HasMetadata> void logResource(String operation, Level logLevel, T resource) {
7373
if (resource.getMetadata().getNamespace() == null) {
74-
LOGGER.log(logLevel, LoggerUtils.RESOURCE_LOGGER_PATTERN,
74+
LOGGER.atLevel(logLevel).log(LoggerUtils.RESOURCE_LOGGER_PATTERN,
7575
operation, resource.getKind(),
7676
resource.getMetadata().getName());
7777
} else {
78-
LOGGER.log(logLevel, LoggerUtils.RESOURCE_WITH_NAMESPACE_LOGGER_PATTERN,
78+
LOGGER.atLevel(logLevel).log(LoggerUtils.RESOURCE_WITH_NAMESPACE_LOGGER_PATTERN,
7979
operation,
8080
resource.getKind(), resource.getMetadata().getName(), resource.getMetadata().getNamespace());
8181
}

0 commit comments

Comments
 (0)