Wie kann man gRPC-Java-Protokolle im Jahr 2024 programmgesteuert deaktivieren/einstellen?
Mehrere glaubwürdige Quellen aus der Zeit vor ein paar Jahren sagen Folgendes:
gRPC verwendet java.util.Logging
(grpc-io-Mailingliste)
Zur Laufzeit können Sie so etwas tun wie
Logger.getLogger("io.grpc").setLevel(Level.INFO) (tippt aus dem Gedächtnis). (grpc-java issue #2994)
Das Folgende ist mein Versuch, die registrierten Logger herauszufinden und sie dann einzeln zu deaktivieren:
java.util.logging.Logger logger;
Enumeration iter = java.util.logging
.LogManager
.getLogManager()
.getLoggerNames();
while (iter.hasMoreElements())
{
String loggerName = iter.nextElement();
System.out.println(loggerName); // whois logging?
logger = java.util.logging.Logger.getLogger(loggerName);
logger.setLevel(Level.OFF);
for (Handler h : logger.getHandlers()) {
h.setLevel(Level.OFF);
}
}
und wir haben die folgenden Logger gefunden, die bei der Protokollierungsfunktion des JDK registriert sind (siehe Ende der Ausgabe). Der obige Code hat sie jedoch nicht deaktiviert:
2024-03-06 19:16:50,460 DEBUG [main] io.netty.util.internal.logging.InternalLoggerFactory: Using Log4J as the default logging framework
2024-03-06 19:16:50,461 DEBUG [main] io.netty.util.internal.PlatformDependent0: -Dio.netty.noUnsafe: false
v2024-03-06 19:16:50,462 DEBUG [main] io.netty.util.internal.PlatformDependent0: Java version: 19
...
2024-03-06 19:16:50,569 DEBUG [main] io.netty.buffer.PooledByteBufAllocator: -Dio.netty.allocator.maxCachedBufferCapacity: 32768
2024-03-06 19:16:50,569 DEBUG [main] io.netty.buffer.PooledByteBufAllocator: -Dio.netty.allocator.maxCachedBufferCapacity: 32768
2024-03-06 19:16:50,569 DEBUG [main] io.netty.buffer.PooledByteBufAllocator: -Dio.netty.allocator.cacheTrimInterval: 8192
2024-03-06 19:16:50,569 DEBUG [main] io.netty.buffer.PooledByteBufAllocator: -Dio.netty.allocator.cacheTrimIntervalMillis: 0
2024-03-06 19:16:50,569 DEBUG [main] io.netty.buffer.PooledByteBufAllocator: -Dio.netty.allocator.useCacheForAllThreads: false
2024-03-06 19:16:50,569 DEBUG [main] io.netty.buffer.PooledByteBufAllocator: -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
2024-03-06 19:16:50,591 DEBUG [grpc-nio-boss-ELG-1-1] io.netty.channel.DefaultChannelId: -Dio.netty.processId: 22423 (auto-detected)
2024-03-06 19:16:50,592 DEBUG [grpc-nio-boss-ELG-1-1] io.netty.util.NetUtil: -Djava.net.preferIPv4Stack: false
2024-03-06 19:16:50,592 DEBUG [grpc-nio-boss-ELG-1-1] io.netty.util.NetUtil: -Djava.net.preferIPv6Addresses: false
2024-03-06 19:16:50,593 DEBUG [grpc-nio-boss-ELG-1-1] io.netty.util.NetUtilInitializations: Loopback interface: lo (lo, 0:0:0:0:0:0:0:1%lo)
2024-03-06 19:16:50,594 DEBUG [grpc-nio-boss-ELG-1-1] io.netty.util.NetUtil: /proc/sys/net/core/somaxconn: 4096
2024-03-06 19:16:50,595 DEBUG [grpc-nio-boss-ELG-1-1] io.netty.channel.DefaultChannelId: -Dio.netty.machineId: 48:5b:39:ff:fe:7f:9d:15 (auto-detected)
2024-03-06 19:16:50,606 DEBUG [grpc-nio-boss-ELG-1-1] io.netty.buffer.ByteBufUtil: -Dio.netty.allocator.type: pooled
2024-03-06 19:16:50,606 DEBUG [grpc-nio-boss-ELG-1-1] io.netty.buffer.ByteBufUtil: -Dio.netty.threadLocalDirectBufferSize: 0
2024-03-06 19:16:50,606 DEBUG [grpc-nio-boss-ELG-1-1] io.netty.buffer.ByteBufUtil: -Dio.netty.maxThreadLocalCharBufferSize: 16384
2024-03-06 19:16:50,621 INFO [main] root: Server listening on host /[0:0:0:0:0:0:0:0]
io.grpc.Context
io.grpc.internal.ReflectionLongAdderCounter
io.grpc.internal.ServerImplBuilder
global
io.grpc.internal.InternalServer
io.grpc.netty.ProtocolNegotiators
io.grpc.netty.Utils
io.grpc.internal.ProxyDetectorImpl
io.grpc.internal.ServerImpl
io.grpc.internal.GrpcUtil
io.grpc.Metadata
io.grpc.InternalChannelz
java.io.serialization
Natürlich gibt es einige gRPC-Elemente, die die Standardprotokollierungsfunktion des JDK verwenden, aber ich vermute, dass in der obigen Ausgabe keine Protokollnachrichten von diesen Loggern enthalten sind. Ich bin mir einfach nicht sicher, da ich mit der Protokollierung nicht so vertraut bin. Zumindest bin ich mir nicht sicher, welche Protokollmeldungen von welchen Loggern/Diensten kommen.
Endlich konnte ich alle Protokolle, die wir zuvor (oben) gesehen haben, durch
Deaktivierung deaktivieren Der Root-Logger von l4j2: this.logger.getRootLogger().setLevel(Level.OFF);
F1) Verwendet gRPC jetzt l4j2 als Logger (statt JDKs Standardprotokollierungsfunktion)?
F2) Wie können Protokollnachrichten von grpc-java programmgesteuert richtig festgelegt/deaktiviert werden?
Zu Ihrer Information: Ich würde auf jeden Fall gerne neben den vielen anderen auch io.netty ausschalten