diff --git a/slf4j-bridge/src/main/java/org/slf4j/helpers/ZioLoggerBase.java b/slf4j-bridge/src/main/java/org/slf4j/helpers/ZioLoggerBase.java index e9c1ad1f..b991e923 100644 --- a/slf4j-bridge/src/main/java/org/slf4j/helpers/ZioLoggerBase.java +++ b/slf4j-bridge/src/main/java/org/slf4j/helpers/ZioLoggerBase.java @@ -26,7 +26,7 @@ public ZioLoggerBase(String name) { abstract protected void log(Level level, Marker marker, String messagePattern, Object[] arguments, Throwable throwable); - abstract protected boolean isEnabled(String name, Level level); + abstract protected boolean isEnabled(Level level); private void logWithThrowable(Level level, Marker marker, String msg, Throwable t) { log(level, marker, msg, null, t); @@ -56,27 +56,27 @@ private void logWithArgs(Level level, Marker marker, String msg, Object[] args) @Override public boolean isTraceEnabled() { - return isEnabled(name, Level.TRACE); + return isEnabled(Level.TRACE); } @Override public boolean isDebugEnabled() { - return isEnabled(name, Level.DEBUG); + return isEnabled(Level.DEBUG); } @Override public boolean isErrorEnabled() { - return isEnabled(name, Level.ERROR); + return isEnabled(Level.ERROR); } @Override public boolean isWarnEnabled() { - return isEnabled(name, Level.WARN); + return isEnabled(Level.WARN); } @Override public boolean isInfoEnabled() { - return isEnabled(name, Level.INFO); + return isEnabled(Level.INFO); } @Override diff --git a/slf4j-bridge/src/main/scala/org/slf4j/impl/LoggerRuntime.scala b/slf4j-bridge/src/main/scala/org/slf4j/impl/LoggerRuntime.scala index ac342f00..2c4e5eb4 100644 --- a/slf4j-bridge/src/main/scala/org/slf4j/impl/LoggerRuntime.scala +++ b/slf4j-bridge/src/main/scala/org/slf4j/impl/LoggerRuntime.scala @@ -17,11 +17,12 @@ package org.slf4j.impl import org.slf4j.Marker import org.slf4j.event.Level +import zio.logging.slf4j.bridge.LoggerData trait LoggerRuntime { def log( - name: String, + logger: LoggerData, level: Level, marker: Marker, messagePattern: String, @@ -29,5 +30,5 @@ trait LoggerRuntime { throwable: Throwable ): Unit - def isEnabled(name: String, level: Level): Boolean + def isEnabled(logger: LoggerData, level: Level): Boolean } diff --git a/slf4j-bridge/src/main/scala/org/slf4j/impl/ZioLogger.scala b/slf4j-bridge/src/main/scala/org/slf4j/impl/ZioLogger.scala index 29459812..cb504443 100644 --- a/slf4j-bridge/src/main/scala/org/slf4j/impl/ZioLogger.scala +++ b/slf4j-bridge/src/main/scala/org/slf4j/impl/ZioLogger.scala @@ -18,8 +18,11 @@ package org.slf4j.impl import org.slf4j.Marker import org.slf4j.event.Level import org.slf4j.helpers.ZioLoggerBase +import zio.logging.slf4j.bridge.LoggerData final class ZioLogger(name: String, factory: ZioLoggerFactory) extends ZioLoggerBase(name) { + private val data: LoggerData = LoggerData(name) + override protected def log( level: Level, marker: Marker, @@ -27,7 +30,7 @@ final class ZioLogger(name: String, factory: ZioLoggerFactory) extends ZioLogger arguments: Array[AnyRef], throwable: Throwable ): Unit = - factory.log(name, level, marker, messagePattern, arguments, throwable) + factory.log(data, level, marker, messagePattern, arguments, throwable) - override protected def isEnabled(name: String, level: Level): Boolean = factory.isEnabled(name, level) + override protected def isEnabled(level: Level): Boolean = factory.isEnabled(data, level) } diff --git a/slf4j-bridge/src/main/scala/org/slf4j/impl/ZioLoggerFactory.scala b/slf4j-bridge/src/main/scala/org/slf4j/impl/ZioLoggerFactory.scala index 6a453689..bca0f357 100644 --- a/slf4j-bridge/src/main/scala/org/slf4j/impl/ZioLoggerFactory.scala +++ b/slf4j-bridge/src/main/scala/org/slf4j/impl/ZioLoggerFactory.scala @@ -17,6 +17,7 @@ package org.slf4j.impl import org.slf4j.event.Level import org.slf4j.{ ILoggerFactory, Logger, Marker } +import zio.logging.slf4j.bridge.LoggerData import java.util.concurrent.ConcurrentHashMap import scala.jdk.CollectionConverters._ @@ -29,17 +30,17 @@ class ZioLoggerFactory extends ILoggerFactory { this.runtime = runtime private[impl] def log( - name: String, + logger: LoggerData, level: Level, marker: Marker, messagePattern: String, arguments: Array[AnyRef], throwable: Throwable ): Unit = - if (runtime != null) runtime.log(name, level, marker, messagePattern, arguments, throwable) + if (runtime != null) runtime.log(logger, level, marker, messagePattern, arguments, throwable) - private[impl] def isEnabled(name: String, level: Level): Boolean = - if (runtime != null) runtime.isEnabled(name, level) else false + private[impl] def isEnabled(logger: LoggerData, level: Level): Boolean = + if (runtime != null) runtime.isEnabled(logger, level) else false override def getLogger(name: String): Logger = loggers.getOrElseUpdate(name, new ZioLogger(name, this)) diff --git a/slf4j-bridge/src/main/scala/zio/logging/slf4j/bridge/LoggerData.scala b/slf4j-bridge/src/main/scala/zio/logging/slf4j/bridge/LoggerData.scala new file mode 100644 index 00000000..98106cef --- /dev/null +++ b/slf4j-bridge/src/main/scala/zio/logging/slf4j/bridge/LoggerData.scala @@ -0,0 +1,22 @@ +/* + * Copyright 2019-2024 John A. De Goes and the ZIO Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package zio.logging.slf4j.bridge + +final case class LoggerData(name: String) { + + lazy val annotations: Map[String, String] = Map(zio.logging.loggerNameAnnotationKey -> name) + +} diff --git a/slf4j-bridge/src/main/scala/zio/logging/slf4j/bridge/ZioLoggerRuntime.scala b/slf4j-bridge/src/main/scala/zio/logging/slf4j/bridge/ZioLoggerRuntime.scala index af13bb91..bff01a2b 100644 --- a/slf4j-bridge/src/main/scala/zio/logging/slf4j/bridge/ZioLoggerRuntime.scala +++ b/slf4j-bridge/src/main/scala/zio/logging/slf4j/bridge/ZioLoggerRuntime.scala @@ -20,12 +20,12 @@ import org.slf4j.event.Level import org.slf4j.helpers.MessageFormatter import org.slf4j.impl.LoggerRuntime import zio.logging.LogFilter -import zio.{ Cause, Fiber, FiberId, FiberRef, FiberRefs, LogLevel, Runtime, Trace, Unsafe } +import zio.{Cause, Fiber, FiberId, FiberRef, FiberRefs, LogLevel, Runtime, Trace, Unsafe} final class ZioLoggerRuntime(runtime: Runtime[Any], filter: LogFilter[Any]) extends LoggerRuntime { override def log( - name: String, + logger: LoggerData, level: Level, marker: Marker, messagePattern: String, @@ -44,8 +44,8 @@ final class ZioLoggerRuntime(runtime: Runtime[Any], filter: LogFilter[Any]) exte runtime.fiberRefs.joinAs(fiberId)(currentFiber.unsafe.getFiberRefs()) } - val logSpan = zio.LogSpan(name, java.lang.System.currentTimeMillis()) - val loggerName = (zio.logging.loggerNameAnnotationKey -> name) + val logSpan = zio.LogSpan(logger.name, java.lang.System.currentTimeMillis()) + val loggerName = (zio.logging.loggerNameAnnotationKey -> logger.name) val fiberRefs = currentFiberRefs .updatedAs(fiberId)(FiberRef.currentLogSpan, logSpan :: currentFiberRefs.getOrDefault(FiberRef.currentLogSpan)) @@ -71,18 +71,18 @@ final class ZioLoggerRuntime(runtime: Runtime[Any], filter: LogFilter[Any]) exte fiberRuntime.log(() => msg, cause, Some(logLevel), trace) } - override def isEnabled(name: String, level: Level): Boolean = { + override def isEnabled(logger: LoggerData, level: Level): Boolean = { val logLevel = ZioLoggerRuntime.logLevelMapping(level) filter( - Trace(name, "", 0), + Trace.empty, FiberId.None, logLevel, () => "", Cause.empty, FiberRefs.empty, List.empty, - Map(zio.logging.loggerNameAnnotationKey -> name) + logger.annotations ) }