Skip to content

Commit 9a68915

Browse files
authored
Merge pull request #27 from paypal/issue-26-remove-logback
Issue 26 remove logback
2 parents d13f7c5 + 06ebac6 commit 9a68915

File tree

11 files changed

+129
-87
lines changed

11 files changed

+129
-87
lines changed

pom.xml

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,30 +26,28 @@
2626
<jacoco-maven-plugin.version>0.8.12</jacoco-maven-plugin.version>
2727
<jgitflow-maven-plugin.version>1.0-m5.1</jgitflow-maven-plugin.version>
2828
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss z</maven.build.timestamp.format>
29-
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
30-
<maven-dependency-plugin.version>3.2.0</maven-dependency-plugin.version>
31-
<maven-deploy-plugin.version>3.0.0-M1</maven-deploy-plugin.version>
29+
<maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
30+
<maven-dependency-plugin.version>3.8.1</maven-dependency-plugin.version>
31+
<maven-deploy-plugin.version>3.1.3</maven-deploy-plugin.version>
3232
<maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version>
33-
<maven-failsafe-plugin.version>3.0.0-M5</maven-failsafe-plugin.version>
34-
<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
33+
<maven-failsafe-plugin.version>3.5.2</maven-failsafe-plugin.version>
34+
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
3535
<maven-source-plugin.version>3.2.1</maven-source-plugin.version>
36-
<maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
36+
<maven-surefire-plugin.version>3.5.2</maven-surefire-plugin.version>
3737
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3838
<project.reporting.outputEncoding>${project.build.sourceEncoding}</project.reporting.outputEncoding>
3939

4040
<!-- Specify all SonarQube code coverage reports - default does not pick up integration tests -->
4141
<sonar.coverage.jacoco.xmlReportPaths>target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,target/site/jacoco-aggregate/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
4242

43-
<logback.version>1.3.14</logback.version>
44-
<slf4j.version>2.0.12</slf4j.version>
43+
<slf4j.version>2.0.16</slf4j.version>
4544
<spring-boot.version>2.7.18</spring-boot.version>
4645
<versions-maven-plugin.version>2.7</versions-maven-plugin.version>
4746

4847
<!-- Dependency versions -->
49-
<commons-compress.version>1.26.0</commons-compress.version>
50-
<commons-io.version>2.15.1</commons-io.version>
51-
<commons-lang3.version>3.14.0</commons-lang3.version>
52-
<commons-text.version>1.11.0</commons-text.version>
48+
<commons-compress.version>1.27.1</commons-compress.version>
49+
<commons-lang3.version>3.17.0</commons-lang3.version>
50+
<commons-text.version>1.13.0</commons-text.version>
5351
<junit-pioneer.version>1.9.1</junit-pioneer.version>
5452
<meanbean.version>3.0.0-M9</meanbean.version>
5553
<picocli.version>4.7.5</picocli.version>
@@ -122,34 +120,15 @@
122120
<version>${commons-compress.version}</version>
123121
</dependency>
124122

125-
<dependency>
126-
<groupId>commons-io</groupId>
127-
<artifactId>commons-io</artifactId>
128-
<version>${commons-io.version}</version>
129-
</dependency>
130-
131123
<dependency>
132124
<groupId>org.apache.commons</groupId>
133125
<artifactId>commons-text</artifactId>
134126
<version>${commons-text.version}</version>
135127
</dependency>
136128

137129
<dependency>
138-
<groupId>ch.qos.logback</groupId>
139-
<artifactId>logback-classic</artifactId>
140-
<version>${logback.version}</version>
141-
<exclusions>
142-
<exclusion>
143-
<groupId>ch.qos.logback</groupId>
144-
<artifactId>logback-core</artifactId>
145-
</exclusion>
146-
</exclusions>
147-
</dependency>
148-
149-
<dependency>
150-
<groupId>ch.qos.logback</groupId>
151-
<artifactId>logback-core</artifactId>
152-
<version>${logback.version}</version>
130+
<groupId>org.slf4j</groupId>
131+
<artifactId>slf4j-api</artifactId>
153132
</dependency>
154133

155134
<dependency>

src/main/java/com/paypal/heapdumptool/Application.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
import com.paypal.heapdumptool.hserr.SanitizeHserrCommand;
77
import com.paypal.heapdumptool.sanitizer.DataSize;
88
import com.paypal.heapdumptool.sanitizer.SanitizeCommand;
9+
import com.paypal.heapdumptool.utils.InternalLogger;
910
import org.apache.commons.text.StringSubstitutor;
10-
import org.slf4j.Logger;
11-
import org.slf4j.LoggerFactory;
1211
import picocli.CommandLine;
1312
import picocli.CommandLine.Command;
1413
import picocli.CommandLine.HelpCommand;
@@ -19,8 +18,8 @@
1918
import java.util.Properties;
2019

2120
import static com.paypal.heapdumptool.Application.APP_ID;
22-
import static com.paypal.heapdumptool.capture.PrivilegeEscalator.escalatePrivilegesIfNeeded;
2321
import static com.paypal.heapdumptool.capture.PrivilegeEscalator.Escalation.ESCALATED;
22+
import static com.paypal.heapdumptool.capture.PrivilegeEscalator.escalatePrivilegesIfNeeded;
2423
import static org.apache.commons.io.IOUtils.resourceToByteArray;
2524

2625
@Command(name = APP_ID,
@@ -63,8 +62,7 @@ public static class VersionProvider implements IVersionProvider {
6362

6463
public static void printVersion() throws IOException {
6564
final String[] versionInfo = new VersionProvider().getVersion();
66-
final Logger logger = LoggerFactory.getLogger(Application.class); // lazy init
67-
logger.info(versionInfo[0]);
65+
InternalLogger.getLogger(Application.class).info(versionInfo[0]);
6866
}
6967

7068
@Override
@@ -77,7 +75,7 @@ public String[] getVersion() throws IOException {
7775
final String versionInfo = StringSubstitutor.replace(
7876
"${appId} (${git.build.version} ${git.commit.id.abbrev}, ${git.commit.time})",
7977
gitProperties);
80-
return new String[] {versionInfo};
78+
return new String[]{versionInfo};
8179
}
8280

8381
}

src/main/java/com/paypal/heapdumptool/capture/CaptureCommandProcessor.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.paypal.heapdumptool.cli.CliCommandProcessor;
44
import com.paypal.heapdumptool.sanitizer.SanitizeCommand;
55
import com.paypal.heapdumptool.sanitizer.SanitizeCommandProcessor;
6+
import com.paypal.heapdumptool.utils.InternalLogger;
67
import com.paypal.heapdumptool.utils.ProcessTool;
78
import com.paypal.heapdumptool.utils.ProcessTool.ProcessResult;
89
import org.apache.commons.io.IOUtils;
@@ -11,8 +12,6 @@
1112
import org.apache.commons.lang3.Validate;
1213
import org.apache.commons.lang3.function.Failable;
1314
import org.apache.commons.text.StringSubstitutor;
14-
import org.slf4j.Logger;
15-
import org.slf4j.LoggerFactory;
1615

1716
import java.io.Closeable;
1817
import java.io.FilterInputStream;
@@ -45,7 +44,7 @@ public class CaptureCommandProcessor implements CliCommandProcessor {
4544

4645
private static final String DOCKER = "docker";
4746

48-
private static final Logger LOGGER = LoggerFactory.getLogger(CaptureCommandProcessor.class);
47+
private static final InternalLogger LOGGER = InternalLogger.getLogger(CaptureCommandProcessor.class);
4948

5049
private final CaptureCommand command;
5150

@@ -254,9 +253,7 @@ private ProcessResult invokePrivilegedProcess(final String... args) throws Excep
254253
}
255254

256255
private void logProcessArgs(final String... cmd) {
257-
if (LOGGER.isInfoEnabled()) {
258-
LOGGER.info("Running: {}", String.join(" ", cmd));
259-
}
256+
LOGGER.info("Running: {}", String.join(" ", cmd));
260257
}
261258

262259
private static <T> T[] concat(final T element, final T[] array) {

src/main/java/com/paypal/heapdumptool/hserr/SanitizeHserrCommandProcessor.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
import com.paypal.heapdumptool.cli.CliCommandProcessor;
44
import com.paypal.heapdumptool.sanitizer.SanitizeCommand;
55
import com.paypal.heapdumptool.sanitizer.SanitizeStreamFactory;
6+
import com.paypal.heapdumptool.utils.InternalLogger;
67
import org.apache.commons.io.IOUtils;
78
import org.apache.commons.lang3.StringUtils;
8-
import org.slf4j.Logger;
9-
import org.slf4j.LoggerFactory;
109

1110
import java.io.InputStream;
1211
import java.io.OutputStream;
@@ -19,7 +18,7 @@
1918

2019
public class SanitizeHserrCommandProcessor implements CliCommandProcessor {
2120

22-
private static final Logger LOGGER = LoggerFactory.getLogger(SanitizeHserrCommandProcessor.class);
21+
private static final InternalLogger LOGGER = InternalLogger.getLogger(SanitizeHserrCommandProcessor.class);
2322

2423
private final SanitizeHserrCommand command;
2524

src/main/java/com/paypal/heapdumptool/sanitizer/HeapDumpSanitizer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package com.paypal.heapdumptool.sanitizer;
22

3+
import com.paypal.heapdumptool.utils.InternalLogger;
34
import com.paypal.heapdumptool.utils.ProgressMonitor;
45
import org.apache.commons.io.input.InfiniteCircularInputStream;
56
import org.apache.commons.lang3.Validate;
6-
import org.slf4j.Logger;
7-
import org.slf4j.LoggerFactory;
87

98
import java.io.IOException;
109
import java.io.InputStream;
@@ -41,7 +40,7 @@ public class HeapDumpSanitizer {
4140
private static final int TAG_HEAP_DUMP = 0x0C;
4241
private static final int TAG_HEAP_DUMP_SEGMENT = 0x1C;
4342

44-
private static final Logger LOGGER = LoggerFactory.getLogger(HeapDumpSanitizer.class);
43+
private static final InternalLogger LOGGER = InternalLogger.getLogger(HeapDumpSanitizer.class);
4544

4645
// for debugging/testing
4746
private static final boolean enableSanitization = isFalse(Boolean.getBoolean("disable-sanitization"));

src/main/java/com/paypal/heapdumptool/sanitizer/Pipe.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ private Pipe(final DataInputStream input, final DataOutputStream output, final I
3535
/**
3636
* Creates a copy of this pipe where only up to give count of bytes can read from input stream
3737
*/
38+
@SuppressWarnings("deprecation")
3839
public Pipe newInputBoundedPipe(final long inputCount) {
3940
final DataInputStream boundedInput = new DataInputStream(new BoundedInputStream(input, inputCount));
4041
return new Pipe(boundedInput, output, idSize);

src/main/java/com/paypal/heapdumptool/sanitizer/SanitizeCommandProcessor.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package com.paypal.heapdumptool.sanitizer;
22

33
import com.paypal.heapdumptool.cli.CliCommandProcessor;
4+
import com.paypal.heapdumptool.utils.InternalLogger;
45
import org.apache.commons.lang3.Validate;
5-
import org.slf4j.Logger;
6-
import org.slf4j.LoggerFactory;
76

87
import java.io.InputStream;
98
import java.io.OutputStream;
@@ -14,7 +13,7 @@
1413

1514
public class SanitizeCommandProcessor implements CliCommandProcessor {
1615

17-
private static final Logger LOGGER = LoggerFactory.getLogger(SanitizeCommandProcessor.class);
16+
private static final InternalLogger LOGGER = InternalLogger.getLogger(SanitizeCommandProcessor.class);
1817

1918
private final SanitizeCommand command;
2019

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.paypal.heapdumptool.utils;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
import org.slf4j.spi.SLF4JServiceProvider;
6+
7+
import java.io.PrintStream;
8+
import java.time.OffsetDateTime;
9+
import java.time.format.DateTimeFormatter;
10+
import java.time.temporal.ChronoUnit;
11+
import java.util.ServiceLoader;
12+
13+
// class to make slf4j impl work when heap-dump-tool is used as a library or when used as an app without slf4j impl
14+
public class InternalLogger {
15+
16+
private static final int DEBUG_INT = 10;
17+
18+
private static final int INFO_INT = 20;
19+
20+
private static final boolean hasSlf4jImpl = hasSelf4jImpl();
21+
22+
private static final int level = Integer.getInteger("heap-dump-tool.logLevel", INFO_INT);
23+
24+
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss,SSS");
25+
26+
private final PrintStream out = System.out;
27+
28+
private final String clazz;
29+
30+
private Logger logger;
31+
32+
public InternalLogger(final Class<?> clazz) {
33+
this.clazz = clazz.getSimpleName();
34+
}
35+
36+
private static boolean hasSelf4jImpl() {
37+
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader() != null
38+
? Thread.currentThread().getContextClassLoader()
39+
: InternalLogger.class.getClassLoader();
40+
final String explicitlySpecified = System.getProperty("slf4j.provider");
41+
if (explicitlySpecified != null && !explicitlySpecified.isEmpty()) {
42+
return true;
43+
}
44+
final ServiceLoader<SLF4JServiceProvider> loader = ServiceLoader.load(SLF4JServiceProvider.class, classLoader);
45+
return loader.iterator().hasNext();
46+
}
47+
48+
public static InternalLogger getLogger(final Class<?> clazz) {
49+
return new InternalLogger(clazz);
50+
}
51+
52+
private synchronized Logger getLogger() {
53+
if (logger == null) {
54+
logger = LoggerFactory.getLogger(clazz);
55+
}
56+
return logger;
57+
}
58+
59+
public void info(final String format, final Object... arguments) {
60+
if (hasSlf4jImpl) {
61+
getLogger().info(format, arguments);
62+
} else if (level <= INFO_INT) {
63+
final String message = getMessage(format, arguments);
64+
out.printf("%s INFO %s - %s%n", getTimestamp(), clazz, message);
65+
}
66+
}
67+
68+
public void debug(final String format, final Object... arguments) {
69+
if (hasSlf4jImpl) {
70+
getLogger().debug(format, arguments);
71+
} else if (level <= DEBUG_INT) {
72+
final String message = getMessage(format, arguments);
73+
out.printf("%s DEBUG %s - %s%n", getTimestamp(), clazz, message);
74+
}
75+
}
76+
77+
private static String getMessage(final String format, final Object[] arguments) {
78+
final String newFormat = format.replace("{}", "%s");
79+
return String.format(newFormat, arguments);
80+
}
81+
82+
private static String getTimestamp() {
83+
return dateTimeFormatter.format(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
84+
}
85+
}

src/main/java/com/paypal/heapdumptool/utils/ProgressMonitor.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
import com.paypal.heapdumptool.sanitizer.DataSize;
44
import org.apache.commons.io.FileUtils;
5-
import org.apache.commons.io.input.CountingInputStream;
5+
import org.apache.commons.io.input.BoundedInputStream;
66
import org.apache.commons.io.output.CountingOutputStream;
77
import org.apache.commons.lang3.mutable.MutableLong;
8-
import org.slf4j.Logger;
98

9+
import java.io.IOException;
1010
import java.io.InputStream;
1111
import java.io.OutputStream;
12+
import java.io.UncheckedIOException;
1213
import java.util.function.Consumer;
1314

1415
@FunctionalInterface
@@ -17,13 +18,13 @@ public interface ProgressMonitor extends Consumer<Long> {
1718
/**
1819
* Create a new {@link ProgressMonitor} that logs a message for each stepSize processed
1920
*/
20-
public static ProgressMonitor numBytesProcessedMonitor(final DataSize stepSize, final Logger logger) {
21+
static ProgressMonitor numBytesProcessedMonitor(final DataSize stepSize, final InternalLogger logger) {
2122
final long stepSizeBytes = stepSize.toBytes();
2223
final MutableLong steps = new MutableLong();
2324

2425
return numBytesProcessed -> {
2526
final long currentSteps = numBytesProcessed / stepSizeBytes;
26-
if (currentSteps != steps.getValue().longValue()) {
27+
if (currentSteps != steps.longValue()) {
2728
steps.setValue(currentSteps);
2829
logger.info("Processed {}", FileUtils.byteCountToDisplaySize(numBytesProcessed));
2930
}
@@ -33,7 +34,7 @@ public static ProgressMonitor numBytesProcessedMonitor(final DataSize stepSize,
3334
/**
3435
* Create a OutputStream monitored by this
3536
*/
36-
public default OutputStream monitoredOutputStream(final OutputStream output) {
37+
default OutputStream monitoredOutputStream(final OutputStream output) {
3738
final ProgressMonitor monitor = this;
3839
return new CountingOutputStream(output) {
3940

@@ -48,14 +49,19 @@ protected void beforeWrite(final int n) {
4849
/**
4950
* Create a OutputStream monitored by this
5051
*/
51-
public default InputStream monitoredInputStream(final InputStream input) {
52+
@SuppressWarnings("deprecation")
53+
default InputStream monitoredInputStream(final InputStream input) {
5254
final ProgressMonitor monitor = this;
53-
return new CountingInputStream(input) {
55+
return new BoundedInputStream(input) {
5456

5557
@Override
56-
protected void afterRead(final int n) {
57-
super.afterRead(n);
58-
monitor.accept(getByteCount());
58+
public void afterRead(final int n) {
59+
try {
60+
super.afterRead(n);
61+
} catch (final IOException e) {
62+
throw new UncheckedIOException(e);
63+
}
64+
monitor.accept(getCount());
5965
}
6066
};
6167
}

src/main/resources/logback.xml

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)