diff --git a/photon-core/src/main/java/org/photonvision/common/logging/LogGroup.java b/photon-core/src/main/java/org/photonvision/common/logging/LogGroup.java index 50524db63..0cdd9e92a 100644 --- a/photon-core/src/main/java/org/photonvision/common/logging/LogGroup.java +++ b/photon-core/src/main/java/org/photonvision/common/logging/LogGroup.java @@ -23,5 +23,6 @@ public enum LogGroup { VisionModule, Data, General, - Config + Config, + CSCore, } 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 0e2ef96ef..c60911a72 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 @@ -99,6 +99,7 @@ public class Logger { levelMap.put(LogGroup.Data, LogLevel.INFO); levelMap.put(LogGroup.VisionModule, LogLevel.INFO); levelMap.put(LogGroup.Config, LogLevel.INFO); + levelMap.put(LogGroup.CSCore, LogLevel.TRACE); } static { @@ -194,7 +195,7 @@ public class Logger { return logLevel.code <= levelMap.get(group).code; } - private void log(String message, LogLevel level) { + void log(String message, LogLevel level) { if (shouldLog(level)) { log(message, level, group, className); } diff --git a/photon-core/src/main/java/org/photonvision/common/logging/PvCSCoreLogger.java b/photon-core/src/main/java/org/photonvision/common/logging/PvCSCoreLogger.java new file mode 100644 index 000000000..9e0146260 --- /dev/null +++ b/photon-core/src/main/java/org/photonvision/common/logging/PvCSCoreLogger.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) Photon Vision. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.photonvision.common.logging; + +import edu.wpi.first.cscore.CameraServerJNI; +import java.nio.file.Path; + +/** Redirect cscore logs to our logger */ +public class PvCSCoreLogger { + private static PvCSCoreLogger INSTANCE; + + public static PvCSCoreLogger getInstance() { + if (INSTANCE == null) { + INSTANCE = new PvCSCoreLogger(); + } + return INSTANCE; + } + + private Logger logger; + + private PvCSCoreLogger() { + CameraServerJNI.setLogger(this::logMsg, 7); + this.logger = new Logger(getClass(), LogGroup.CSCore); + } + + private void logMsg(int level, String file, int line, String msg) { + if (level == 20) { + logger.info(msg); + return; + } + + file = Path.of(file).getFileName().toString(); + + String levelmsg; + LogLevel pvlevel; + if (level >= 50) { + levelmsg = "CRITICAL"; + pvlevel = LogLevel.ERROR; + } else if (level >= 40) { + levelmsg = "ERROR"; + pvlevel = LogLevel.ERROR; + } else if (level >= 30) { + levelmsg = "WARNING"; + pvlevel = LogLevel.WARN; + } else if (level >= 20) { + levelmsg = "INFO"; + pvlevel = LogLevel.INFO; + } else { + levelmsg = "DEBUG"; + pvlevel = LogLevel.DEBUG; + } + logger.log( + "CS: " + levelmsg + " " + level + ": " + msg + " (" + file + ":" + line + ")", pvlevel); + } +} diff --git a/photon-server/src/main/java/org/photonvision/Main.java b/photon-server/src/main/java/org/photonvision/Main.java index a78c0a79f..858813659 100644 --- a/photon-server/src/main/java/org/photonvision/Main.java +++ b/photon-server/src/main/java/org/photonvision/Main.java @@ -35,6 +35,7 @@ import org.photonvision.common.hardware.Platform; import org.photonvision.common.logging.LogGroup; import org.photonvision.common.logging.LogLevel; import org.photonvision.common.logging.Logger; +import org.photonvision.common.logging.PvCSCoreLogger; import org.photonvision.common.networking.NetworkManager; import org.photonvision.common.util.TestUtils; import org.photonvision.common.util.numbers.IntegerCouple; @@ -409,6 +410,8 @@ public class Main { + Platform.getPlatformName() + (Platform.isRaspberryPi() ? (" (Pi " + PiVersion.getPiVersion() + ")") : "")); + PvCSCoreLogger.getInstance(); + logger.debug("Loading ConfigManager..."); ConfigManager.getInstance().load(); // init config manager ConfigManager.getInstance().requestSave();