From 14225b4ceeb5aa2f54b7cc044f72d89de465b556 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 21 Mar 2024 21:18:13 -0400 Subject: [PATCH] Create NTLogAppender --- .../photonvision/common/logging/Logger.java | 23 +++++++++++++++++++ .../src/main/java/org/photonvision/Main.java | 2 ++ 2 files changed, 25 insertions(+) diff --git a/photon-core/src/main/java/org/photonvision/common/logging/Logger.java b/photon-core/src/main/java/org/photonvision/common/logging/Logger.java index 7bba651b53..2d7fdb5b6b 100644 --- a/photon-core/src/main/java/org/photonvision/common/logging/Logger.java +++ b/photon-core/src/main/java/org/photonvision/common/logging/Logger.java @@ -17,6 +17,9 @@ package org.photonvision.common.logging; +import edu.wpi.first.cscore.CameraServerJNI; +import edu.wpi.first.networktables.PubSubOption; +import edu.wpi.first.networktables.StringPublisher; import java.io.*; import java.nio.file.Path; import java.text.ParseException; @@ -28,6 +31,7 @@ import org.photonvision.common.configuration.PathManager; import org.photonvision.common.dataflow.DataChangeService; import org.photonvision.common.dataflow.events.OutgoingUIEvent; +import org.photonvision.common.dataflow.networktables.NetworkTablesManager; import org.photonvision.common.util.TimedTaskManager; /** TODO: get rid of static {} blocks and refactor to singleton pattern */ @@ -127,6 +131,11 @@ public static void addFileAppender(Path logFilePath) { currentAppenders.add(new FileLogAppender(logFilePath)); } + /** Publish log stringst to NT. This must be done AFTER loading ntcore. */ + public static void addNtAppender() { + currentAppenders.add(new NTLogAppender()); + } + public static void closeAllLoggers() { currentAppenders.forEach(LogAppender::shutdown); currentAppenders.clear(); @@ -317,6 +326,20 @@ public void log(String message, LogLevel level) { } } + private static class NTLogAppender implements LogAppender { + private StringPublisher pub = + NetworkTablesManager.getInstance() + .kRootTable + .getSubTable("log_outputs") + .getStringTopic(CameraServerJNI.getHostname()) + .publish(PubSubOption.sendAll(true)); + + @Override + public void log(String message, LogLevel level) { + pub.accept(message); + } + } + private static class FileLogAppender implements LogAppender { private OutputStream out; private boolean wantsFlush; diff --git a/photon-server/src/main/java/org/photonvision/Main.java b/photon-server/src/main/java/org/photonvision/Main.java index 2e07c52700..6d7df1bc2e 100644 --- a/photon-server/src/main/java/org/photonvision/Main.java +++ b/photon-server/src/main/java/org/photonvision/Main.java @@ -203,6 +203,8 @@ public static void main(String[] args) { } logger.info("WPI JNI libraries loaded."); + Logger.addNtAppender(); + try { boolean success = PhotonTargetingJniLoader.load();