diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 7b2bec30..75e5ee37 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -21,6 +21,7 @@ jobs: java-version: '8' distribution: 'adopt' - name: Import GPG secrets + if: ${{ !startsWith(github.ref, 'refs/pull') }} run: | echo $GPG_SECRET_KEYS | base64 --decode > gpg-private-key.txt gpg --pinentry-mode loopback --import --batch gpg-private-key.txt @@ -40,6 +41,7 @@ jobs: if: ${{ !startsWith(github.ref, 'refs/tags/v') }} run: mvn clean test -Pdebug -B -U -Dgpg.skip -Dmaven.javadoc.skip=true - name: Deploy with Maven to OSSRH + if: ${{ !startsWith(github.ref, 'refs/pull') }} run: mvn deploy --settings .maven.xml -B -U -Possrh env: SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} diff --git a/player/pom.xml b/player/pom.xml index 327516cd..6c13edc1 100644 --- a/player/pom.xml +++ b/player/pom.xml @@ -91,6 +91,11 @@ ${lmax-disruptor.version} runtime + + org.slf4j + slf4j-api + ${slf4j-api.version} + diff --git a/player/src/main/java/xyz/gianlu/librespot/player/FileConfiguration.java b/player/src/main/java/xyz/gianlu/librespot/player/FileConfiguration.java index 008b5551..e3838d4c 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/FileConfiguration.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/FileConfiguration.java @@ -13,8 +13,8 @@ import com.electronwill.nightconfig.toml.TomlParser; import com.spotify.connectstate.Connect; import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.gianlu.librespot.ZeroconfServer; @@ -37,7 +37,7 @@ * @author devgianlu */ public final class FileConfiguration { - private static final Logger LOGGER = LogManager.getLogger(FileConfiguration.class); + private static final Logger LOGGER = LoggerFactory.getLogger(FileConfiguration.class); static { FormatDetector.registerExtension("properties", new PropertiesFormat()); diff --git a/player/src/main/java/xyz/gianlu/librespot/player/Player.java b/player/src/main/java/xyz/gianlu/librespot/player/Player.java index 36f9e682..0a12e3eb 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/Player.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/Player.java @@ -8,8 +8,8 @@ import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Range; @@ -44,7 +44,7 @@ */ public class Player implements Closeable { public static final int VOLUME_MAX = 65536; - private static final Logger LOGGER = LogManager.getLogger(Player.class); + private static final Logger LOGGER = LoggerFactory.getLogger(Player.class); private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(new NameThreadFactory((r) -> "release-line-scheduler-" + r.hashCode())); private final Session session; private final PlayerConfiguration conf; @@ -61,7 +61,7 @@ public Player(@NotNull PlayerConfiguration conf, @NotNull Session session) { this.session = session; this.events = new EventsDispatcher(conf); this.sink = new AudioSink(conf, ex -> { - LOGGER.fatal("Sink error!", ex); + LOGGER.error("Sink error!", ex); panicState(PlaybackMetrics.Reason.TRACK_ERROR); }); @@ -242,10 +242,10 @@ public void load(@NotNull String uri, boolean play, boolean shuffle) { loadSession(sessionId, play, true); } catch (IOException | MercuryClient.MercuryException ex) { - LOGGER.fatal("Failed loading context!", ex); + LOGGER.error("Failed loading context!", ex); panicState(null); } catch (AbsSpotifyContext.UnsupportedContextException ex) { - LOGGER.fatal("Cannot play local tracks!", ex); + LOGGER.error("Cannot play local tracks!", ex); panicState(null); } } @@ -362,7 +362,7 @@ public void loadingError(@NotNull Exception ex) { if (ex instanceof PlayableContentFeeder.ContentRestrictedException) { LOGGER.error("Can't load track (content restricted).", ex); } else { - LOGGER.fatal("Failed loading track.", ex); + LOGGER.error("Failed loading track.", ex); panicState(PlaybackMetrics.Reason.TRACK_ERROR); } } @@ -370,9 +370,9 @@ public void loadingError(@NotNull Exception ex) { @Override public void playbackError(@NotNull Exception ex) { if (ex instanceof AbsChunkedInputStream.ChunkException) - LOGGER.fatal("Failed retrieving chunk, playback failed!", ex); + LOGGER.error("Failed retrieving chunk, playback failed!", ex); else - LOGGER.fatal("Playback error!", ex); + LOGGER.error("Playback error!", ex); panicState(PlaybackMetrics.Reason.TRACK_ERROR); } @@ -435,7 +435,7 @@ public void playbackResumedFromHalt(int chunk, long diff) { return state.getCurrentPlayableOrThrow(); } else { - LOGGER.fatal("Failed loading next song: " + next); + LOGGER.error("Failed loading next song: " + next); panicState(PlaybackMetrics.Reason.END_PLAY); return null; } @@ -501,10 +501,10 @@ private void handlePlay(@NotNull JsonObject obj) { if (paused == null) paused = false; loadSession(sessionId, !paused, PlayCommandHelper.willSkipToSomething(obj)); } catch (IOException | MercuryClient.MercuryException ex) { - LOGGER.fatal("Failed loading context!", ex); + LOGGER.error("Failed loading context!", ex); panicState(null); } catch (AbsSpotifyContext.UnsupportedContextException ex) { - LOGGER.fatal("Cannot play local tracks!", ex); + LOGGER.error("Cannot play local tracks!", ex); panicState(null); } } @@ -517,10 +517,10 @@ private void handleTransferState(@NotNull TransferStateOuterClass.TransferState events.contextChanged(); loadSession(sessionId, !cmd.getPlayback().getIsPaused(), true); } catch (IOException | MercuryClient.MercuryException ex) { - LOGGER.fatal("Failed loading context!", ex); + LOGGER.error("Failed loading context!", ex); panicState(null); } catch (AbsSpotifyContext.UnsupportedContextException ex) { - LOGGER.fatal("Cannot play local tracks!", ex); + LOGGER.error("Cannot play local tracks!", ex); panicState(null); } } @@ -616,7 +616,7 @@ private void handleSkipNext(@Nullable JsonObject obj, @NotNull TransitionInfo tr state.setPosition(0); loadTrack(next == NextPlayable.OK_PLAY || next == NextPlayable.OK_REPEAT, trans); } else { - LOGGER.fatal("Failed loading next song: " + next); + LOGGER.error("Failed loading next song: " + next); panicState(PlaybackMetrics.Reason.END_PLAY); } } @@ -628,7 +628,7 @@ private void handleSkipPrev() { state.setPosition(0); loadTrack(true, TransitionInfo.skippedPrev(state)); } else { - LOGGER.fatal("Failed loading previous song: " + prev); + LOGGER.error("Failed loading previous song: " + prev); panicState(null); } } else { @@ -644,7 +644,7 @@ private void handleSkipPrev() { private void loadAutoplay() { String context = state.getContextUri(); if (context == null) { - LOGGER.fatal("Cannot load autoplay with null context!"); + LOGGER.error("Cannot load autoplay with null context!"); panicState(null); return; } @@ -673,7 +673,7 @@ private void loadAutoplay() { LOGGER.debug("Loading context for autoplay (using radio-apollo), uri: {}", state.getContextUri()); } else { - LOGGER.fatal("Failed retrieving autoplay context, code: " + resp.statusCode); + LOGGER.error("Failed retrieving autoplay context, code: " + resp.statusCode); state.setPosition(0); state.setState(true, false, false); @@ -687,11 +687,11 @@ private void loadAutoplay() { state.setState(true, true, false); state.updated(); } else { - LOGGER.fatal("Failed loading autoplay station!", ex); + LOGGER.error("Failed loading autoplay station!", ex); panicState(null); } } catch (AbsSpotifyContext.UnsupportedContextException ex) { - LOGGER.fatal("Cannot play local tracks!", ex); + LOGGER.error("Cannot play local tracks!", ex); panicState(null); } } diff --git a/player/src/main/java/xyz/gianlu/librespot/player/StateWrapper.java b/player/src/main/java/xyz/gianlu/librespot/player/StateWrapper.java index 72a58bdf..7905445d 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/StateWrapper.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/StateWrapper.java @@ -19,8 +19,8 @@ import com.spotify.transfer.SessionOuterClass; import com.spotify.transfer.TransferStateOuterClass; import okhttp3.*; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.gianlu.librespot.common.FisherYatesShuffle; @@ -46,7 +46,7 @@ * @author Gianlu */ public class StateWrapper implements DeviceStateHandler.Listener, DealerClient.MessageListener, Closeable { - private static final Logger LOGGER = LogManager.getLogger(StateWrapper.class); + private static final Logger LOGGER = LoggerFactory.getLogger(StateWrapper.class); static { try { diff --git a/player/src/main/java/xyz/gianlu/librespot/player/codecs/Codec.java b/player/src/main/java/xyz/gianlu/librespot/player/codecs/Codec.java index 40096384..a56f92b0 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/codecs/Codec.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/codecs/Codec.java @@ -1,7 +1,7 @@ package xyz.gianlu.librespot.player.codecs; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.gianlu.librespot.audio.AbsChunkedInputStream; @@ -19,7 +19,7 @@ */ public abstract class Codec implements Closeable { public static final int BUFFER_SIZE = 2048; - private static final Logger LOGGER = LogManager.getLogger(Codec.class); + private static final Logger LOGGER = LoggerFactory.getLogger(Codec.class); protected final AbsChunkedInputStream audioIn; protected final float normalizationFactor; protected final int duration; @@ -70,7 +70,7 @@ public void seek(int positionMs) { throw new IOException(String.format("Failed seeking, skip: %d, skipped: %d", skip, skipped)); } } catch (IOException ex) { - LOGGER.fatal("Failed seeking!", ex); + LOGGER.error("Failed seeking!", ex); } } diff --git a/player/src/main/java/xyz/gianlu/librespot/player/codecs/VorbisOnlyAudioQuality.java b/player/src/main/java/xyz/gianlu/librespot/player/codecs/VorbisOnlyAudioQuality.java index 74f3b8d8..747561b3 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/codecs/VorbisOnlyAudioQuality.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/codecs/VorbisOnlyAudioQuality.java @@ -1,8 +1,8 @@ package xyz.gianlu.librespot.player.codecs; import com.spotify.metadata.Metadata; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.gianlu.librespot.audio.format.AudioQualityPicker; @@ -15,7 +15,7 @@ * @author Gianlu */ public final class VorbisOnlyAudioQuality implements AudioQualityPicker { - private static final Logger LOGGER = LogManager.getLogger(VorbisOnlyAudioQuality.class); + private static final Logger LOGGER = LoggerFactory.getLogger(VorbisOnlyAudioQuality.class); private final AudioQuality preferred; public VorbisOnlyAudioQuality(@NotNull AudioQuality preferred) { @@ -41,7 +41,7 @@ public static Metadata.AudioFile getVorbisFile(@NotNull List if (vorbis != null) LOGGER.warn("Using {} because preferred {} couldn't be found.", vorbis.getFormat(), preferred); else - LOGGER.fatal("Couldn't find any Vorbis file, available: {}", Utils.formatsToString(files)); + LOGGER.error("Couldn't find any Vorbis file, available: {}", Utils.formatsToString(files)); } return vorbis; diff --git a/player/src/main/java/xyz/gianlu/librespot/player/crossfade/CrossfadeController.java b/player/src/main/java/xyz/gianlu/librespot/player/crossfade/CrossfadeController.java index fc7bf2a4..45ed35f7 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/crossfade/CrossfadeController.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/crossfade/CrossfadeController.java @@ -3,8 +3,8 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.gianlu.librespot.metadata.PlayableId; @@ -15,7 +15,7 @@ import java.util.Map; public class CrossfadeController { - private static final Logger LOGGER = LogManager.getLogger(CrossfadeController.class); + private static final Logger LOGGER = LoggerFactory.getLogger(CrossfadeController.class); private final String playbackId; private final int trackDuration; private final Map fadeOutMap = new HashMap<>(8); diff --git a/player/src/main/java/xyz/gianlu/librespot/player/events/EventsMetadataPipe.java b/player/src/main/java/xyz/gianlu/librespot/player/events/EventsMetadataPipe.java index 46cd34c0..e8917413 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/events/EventsMetadataPipe.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/events/EventsMetadataPipe.java @@ -1,7 +1,7 @@ package xyz.gianlu.librespot.player.events; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Range; @@ -32,7 +32,7 @@ public final class EventsMetadataPipe implements Player.EventsListener, Closeabl private static final String CODE_PRGR = "70726772"; private static final String CODE_PICT = "50494354"; private static final String CODE_PFLS = "70666C73"; - private static final Logger LOGGER = LogManager.getLogger(EventsMetadataPipe.class); + private static final Logger LOGGER = LoggerFactory.getLogger(EventsMetadataPipe.class); private final File file; private FileOutputStream out; diff --git a/player/src/main/java/xyz/gianlu/librespot/player/events/EventsShell.java b/player/src/main/java/xyz/gianlu/librespot/player/events/EventsShell.java index 7c65e049..d944c73a 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/events/EventsShell.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/events/EventsShell.java @@ -1,7 +1,7 @@ package xyz.gianlu.librespot.player.events; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Range; @@ -16,7 +16,7 @@ * @author devgianlu */ public final class EventsShell implements Player.EventsListener, Session.@NotNull ReconnectionListener { - private static final Logger LOGGER = LogManager.getLogger(EventsShell.class); + private static final Logger LOGGER = LoggerFactory.getLogger(EventsShell.class); private final Configuration conf; private final Runtime runtime; diff --git a/player/src/main/java/xyz/gianlu/librespot/player/metrics/PlaybackMetrics.java b/player/src/main/java/xyz/gianlu/librespot/player/metrics/PlaybackMetrics.java index 46126741..af4c266b 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/metrics/PlaybackMetrics.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/metrics/PlaybackMetrics.java @@ -1,7 +1,7 @@ package xyz.gianlu.librespot.player.metrics; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.gianlu.librespot.core.Session; @@ -17,7 +17,7 @@ * @author devgianlu */ public class PlaybackMetrics { - private static final Logger LOGGER = LogManager.getLogger(PlaybackMetrics.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PlaybackMetrics.class); public final PlayableId id; final String playbackId; final String featureVersion; diff --git a/player/src/main/java/xyz/gianlu/librespot/player/mixing/MixingLine.java b/player/src/main/java/xyz/gianlu/librespot/player/mixing/MixingLine.java index 7b886d76..37605b56 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/mixing/MixingLine.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/mixing/MixingLine.java @@ -1,7 +1,7 @@ package xyz.gianlu.librespot.player.mixing; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.gianlu.librespot.player.codecs.Codec; @@ -14,7 +14,7 @@ * @author Gianlu */ public final class MixingLine extends InputStream { - private static final Logger LOGGER = LogManager.getLogger(MixingLine.class); + private static final Logger LOGGER = LoggerFactory.getLogger(MixingLine.class); boolean switchFormat = false; private GainAwareCircularBuffer fcb; private GainAwareCircularBuffer scb; diff --git a/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerQueue.java b/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerQueue.java index 736d3918..50d02a0b 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerQueue.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerQueue.java @@ -1,7 +1,7 @@ package xyz.gianlu.librespot.player.playback; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -17,7 +17,7 @@ * @author devgianlu */ final class PlayerQueue implements Closeable { - private static final Logger LOGGER = LogManager.getLogger(PlayerQueue.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PlayerQueue.class); private final ExecutorService executorService = Executors.newCachedThreadPool(new NameThreadFactory((r) -> "player-queue-" + r.hashCode())); private PlayerQueueEntry head = null; diff --git a/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerQueueEntry.java b/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerQueueEntry.java index f3b5d83e..fdbf5b4a 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerQueueEntry.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerQueueEntry.java @@ -1,8 +1,8 @@ package xyz.gianlu.librespot.player.playback; import javazoom.jl.decoder.BitstreamException; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import xyz.gianlu.librespot.audio.HaltListener; @@ -43,7 +43,7 @@ class PlayerQueueEntry extends PlayerQueue.Entry implements Closeable, Runnable, static final int INSTANT_PRELOAD = 1; static final int INSTANT_START_NEXT = 2; static final int INSTANT_END = 3; - private static final Logger LOGGER = LogManager.getLogger(PlayerQueueEntry.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PlayerQueueEntry.class); final PlayableId playable; final String playbackId; private final PlayerConfiguration conf; diff --git a/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerSession.java b/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerSession.java index 9e9bdbf8..74b6c4ac 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerSession.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/playback/PlayerSession.java @@ -1,7 +1,7 @@ package xyz.gianlu.librespot.player.playback; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -31,7 +31,7 @@ * @author devgianlu */ public class PlayerSession implements Closeable, PlayerQueueEntry.Listener { - private static final Logger LOGGER = LogManager.getLogger(PlayerSession.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PlayerSession.class); private final ExecutorService executorService = Executors.newCachedThreadPool(new NameThreadFactory((r) -> "player-session-" + r.hashCode())); private final Session session; private final AudioSink sink; diff --git a/player/src/main/java/xyz/gianlu/librespot/player/state/DeviceStateHandler.java b/player/src/main/java/xyz/gianlu/librespot/player/state/DeviceStateHandler.java index 7034687b..07d8edf8 100644 --- a/player/src/main/java/xyz/gianlu/librespot/player/state/DeviceStateHandler.java +++ b/player/src/main/java/xyz/gianlu/librespot/player/state/DeviceStateHandler.java @@ -8,11 +8,10 @@ import com.spotify.connectstate.Connect; import com.spotify.connectstate.Player; import com.spotify.context.ContextTrackOuterClass.ContextTrack; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import xyz.gianlu.librespot.Version; import xyz.gianlu.librespot.common.AsyncWorker; import xyz.gianlu.librespot.common.ProtoUtils; @@ -34,7 +33,7 @@ * @author Gianlu */ public final class DeviceStateHandler implements Closeable, DealerClient.MessageListener, DealerClient.RequestListener { - private static final Logger LOGGER = LogManager.getLogger(DeviceStateHandler.class); + private static final Logger LOGGER = LoggerFactory.getLogger(DeviceStateHandler.class); static { try { @@ -155,7 +154,8 @@ public void onMessage(@NotNull String uri, @NotNull Map headers, Connect.ClusterUpdate update = Connect.ClusterUpdate.parseFrom(payload); long now = TimeProvider.currentTimeMillis(); - LOGGER.trace("Received cluster update at {}: {}", () -> now, () -> TextFormat.shortDebugString(update)); + if (LOGGER.isTraceEnabled()) + LOGGER.trace("Received cluster update at {}: {}", now, TextFormat.shortDebugString(update)); long ts = update.getCluster().getTimestamp() - 3000; // Workaround if (!session.deviceId().equals(update.getCluster().getActiveDeviceId()) && isActive() && now > startedPlayingAt() && ts > startedPlayingAt()) @@ -243,7 +243,7 @@ public void close() { private void putConnectState(@NotNull Connect.PutStateRequest req) { try { session.api().putConnectState(connectionId, req); - if (LOGGER.getLevel().isLessSpecificThan(Level.TRACE)) { + if (LOGGER.isTraceEnabled()) { LOGGER.info("Put state. {ts: {}, connId: {}, reason: {}, request: {}}", req.getClientSideTimestamp(), Utils.truncateMiddle(connectionId, 10), req.getPutStateReason(), TextFormat.shortDebugString(putState)); } else {