Skip to content

Commit 736c427

Browse files
stevenschlanskertomix26
authored andcommitted
Clean up logger names take 2 (#104)
* ProcessOutputLogger: clean up logger name and use just the pid rather than `java.lang.UNIXProcess@42f233` take 2 includes java 8/9+ support and fallback * ProcessOutputLogger: skip `null` lines
1 parent 93a8f3a commit 736c427

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

src/main/java/io/zonky/test/db/postgres/embedded/ProcessOutputLogger.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@
1818
import java.io.BufferedReader;
1919
import java.io.IOException;
2020
import java.io.InputStreamReader;
21+
import java.lang.invoke.MethodHandles;
22+
import java.lang.invoke.MethodType;
23+
import java.lang.reflect.Field;
2124
import java.nio.charset.StandardCharsets;
25+
import java.util.Optional;
2226

2327
import static org.apache.commons.lang3.StringUtils.isNotBlank;
2428

@@ -48,7 +52,7 @@ public void run() {
4852
try {
4953
while (process.isAlive()) {
5054
try {
51-
logger.info(reader.readLine());
55+
Optional.ofNullable(reader.readLine()).ifPresent(logger::info);
5256
} catch (final IOException e) {
5357
logger.error("while reading output", e);
5458
return;
@@ -64,9 +68,23 @@ public void run() {
6468
}
6569

6670
static void logOutput(final Logger logger, final Process process, final String processName) {
67-
final String threadName = isNotBlank(processName) ? processName + "@" + process.hashCode() : process.toString();
71+
final String threadName = (isNotBlank(processName) ? processName : "unknown") + ":" + processId(process);
6872
final Thread t = new Thread(new ProcessOutputLogger(logger, process));
6973
t.setName(threadName);
7074
t.start();
7175
}
76+
77+
private static String processId(Process process) {
78+
try { // java 9+
79+
return String.format("pid(%s)", MethodHandles.lookup().findVirtual(Process.class, "pid", MethodType.methodType(long.class)).invoke(process));
80+
} catch (Throwable ignored) {} // NOPMD since MethodHandles.invoke throws Throwable
81+
82+
try { // openjdk / oraclejdk 8
83+
final Field pid = process.getClass().getDeclaredField("pid");
84+
pid.setAccessible(true);
85+
return String.format("pid(%s)", pid.getInt(process));
86+
} catch (Exception ignored) {} // NOPMD
87+
88+
return String.format("id(%s)", process.hashCode());
89+
}
7290
}

0 commit comments

Comments
 (0)