Skip to content

Commit 5607cd7

Browse files
authored
fix(java): fix slf4j on graalvm (#1432)
This PR closes #1404 by: - Upgrade slf4j to 2.0.12 - Using print instead of slf4j for graalvm
1 parent 552124e commit 5607cd7

File tree

5 files changed

+66
-3
lines changed

5 files changed

+66
-3
lines changed

ci/run_ci.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ graalvm_test() {
9999
mvn -T10 -B --no-transfer-progress clean install -DskipTests
100100
echo "Start to build graalvm native image"
101101
cd "$ROOT"/integration_tests/graalvm_tests
102-
mvn -DskipTests=true -Pnative package
102+
mvn -DskipTests=true --no-transfer-progress -Pnative package
103103
echo "Built graalvm native image"
104104
echo "Start to run graalvm native image"
105105
./target/main

java/fury-core/src/main/java/org/apache/fury/util/LoggerFactory.java

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919

2020
package org.apache.fury.util;
2121

22+
import java.lang.reflect.InvocationHandler;
23+
import java.lang.reflect.Method;
24+
import java.lang.reflect.Proxy;
25+
import java.time.LocalDateTime;
26+
import java.time.format.DateTimeFormatter;
2227
import org.slf4j.Logger;
2328
import org.slf4j.helpers.NOPLogger;
2429

@@ -40,7 +45,64 @@ public static Logger getLogger(Class<?> clazz) {
4045
if (disableLogging) {
4146
return NOPLogger.NOP_LOGGER;
4247
} else {
48+
if (GraalvmSupport.IN_GRAALVM_NATIVE_IMAGE) {
49+
return (Logger)
50+
Proxy.newProxyInstance(
51+
clazz.getClassLoader(), new Class[] {Logger.class}, new GraalvmLogger(clazz));
52+
}
4353
return org.slf4j.LoggerFactory.getLogger(clazz);
4454
}
4555
}
56+
57+
private static final class GraalvmLogger implements InvocationHandler {
58+
private static final DateTimeFormatter dateTimeFormatter =
59+
DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
60+
private final Class<?> targetClass;
61+
62+
private GraalvmLogger(Class<?> targetClass) {
63+
this.targetClass = targetClass;
64+
}
65+
66+
@Override
67+
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
68+
String name = method.getName();
69+
switch (name) {
70+
case "isEnabledForLevel":
71+
case "isInfoEnabled":
72+
case "isWarnEnabled":
73+
case "isErrorEnabled":
74+
return true;
75+
case "info":
76+
log("INFO", false, args);
77+
return null;
78+
case "warn":
79+
log("WARN", false, args);
80+
return null;
81+
case "error":
82+
log("ERROR", false, args);
83+
return null;
84+
default:
85+
return method.invoke(NOPLogger.NOP_LOGGER, args);
86+
}
87+
}
88+
89+
private void log(String level, boolean mayPrintTrace, Object[] args) {
90+
StringBuilder builder = new StringBuilder(dateTimeFormatter.format(LocalDateTime.now()));
91+
builder.append(" ").append(level);
92+
builder.append(" ").append(targetClass.getSimpleName());
93+
builder.append(" [").append(Thread.currentThread().getName()).append(']');
94+
builder.append(" -");
95+
for (Object arg : args) {
96+
builder.append(" ").append(arg);
97+
}
98+
System.out.println(builder);
99+
int length = args.length;
100+
if (mayPrintTrace && length > 0) {
101+
Object o = args[length - 1];
102+
if (o instanceof Throwable) {
103+
((Throwable) o).printStackTrace();
104+
}
105+
}
106+
}
107+
}
46108
}

java/fury-core/src/main/resources/META-INF/native-image/org.apache.fury/fury-core/native-image.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ Args=--initialize-at-build-time=org.apache.fury.memory.MemoryBuffer,\
106106
org.apache.fury.shaded.org.codehaus.janino.Java$Invocation,\
107107
org.apache.fury.shaded.org.codehaus.janino.ReflectionIClass,\
108108
org.apache.fury.util.record.RecordUtils,\
109+
org.apache.fury.util.LoggerFactory$GraalvmLogger,\
109110
org.apache.fury.shaded.org.codehaus.janino.Java$Literal,\
110111
org.apache.fury.shaded.org.codehaus.janino.IClassLoader,\
111112
org.apache.fury.shaded.org.codehaus.janino.Java$PrimitiveType,\

java/fury-test-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
</dependency>
9797
<dependency>
9898
<groupId>org.apache.logging.log4j</groupId>
99-
<artifactId>log4j-slf4j-impl</artifactId>
99+
<artifactId>log4j-slf4j2-impl</artifactId>
100100
<version>${log4j.version}</version>
101101
</dependency>
102102
</dependencies>

java/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
<dependency>
9292
<groupId>org.slf4j</groupId>
9393
<artifactId>slf4j-api</artifactId>
94-
<version>1.7.30</version>
94+
<version>2.0.12</version>
9595
</dependency>
9696
<dependency>
9797
<groupId>com.google.guava</groupId>

0 commit comments

Comments
 (0)