diff --git a/CHANGELOG.md b/CHANGELOG.md index 387bc9d..9288825 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2.0.4 + +### Logging Service + +- [NEW] Added `LogInterceptorCallback` typedef and updated `LogInterceptor` + callback-based APIs to use the shared callback type alias. + ## 2.0.3 ### Logging Service diff --git a/README.md b/README.md index a3aa921..14ff3d3 100644 --- a/README.md +++ b/README.md @@ -536,7 +536,10 @@ class AnalyticsLogger extends LoggingInterface with LoggerName { } Arcane.logger.interceptors.add( - LogInterceptor((event, context) { + LogInterceptor(( + LogEvent event, + LogInterceptorContext context, + ) { if (event.level == Level.debug) { return null; } @@ -581,7 +584,10 @@ final DebugConsole debugConsole = DebugConsole(); await Arcane.logger.registerInterface( debugConsole, interceptors: [ - LogInterceptor((event, context) { + LogInterceptor(( + LogEvent event, + LogInterceptorContext context, + ) { if (event.level == Level.debug) { return null; } @@ -592,7 +598,10 @@ await Arcane.logger.registerInterface( ); Arcane.logger.interceptors.add( - LogInterceptor((event, context) { + LogInterceptor(( + LogEvent event, + LogInterceptorContext context, + ) { return event.copyWith( metadata: { ...?event.metadata, @@ -620,7 +629,10 @@ an explicit matcher. ```dart Arcane.logger.interceptors.add( - LogInterceptor((event, context) { + LogInterceptor(( + LogEvent event, + LogInterceptorContext context, + ) { return event.copyWith(message: "[scoped] ${event.message}"); }), matcher: (interface) => interface is AnalyticsLogger, @@ -693,8 +705,8 @@ If you prefer, you can also define your own interceptor class by implementing ```dart final LogInterceptor redactSecrets = LogInterceptor(( - event, - context, + LogEvent event, + LogInterceptorContext context, ) { final Object? token = event.metadata?["token"]; if (token == null) return event; diff --git a/example/lib/main.dart b/example/lib/main.dart index efd751e..201544d 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -23,6 +23,14 @@ Future main() async { final DebugPrint debugPrintInterface = DebugPrint(); final DebugAuthInterface debugAuthInterface = DebugAuthInterface(); + LogEvent? skipDebugPrintWhenDisabled( + LogEvent event, LogInterceptorContext context) { + if (context.interface is DebugPrint && Feature.logging.disabled) { + return null; + } + + return event; + } // If any Feature enum items are `enabledAtStartup`, enable them within Arcane. for (final Feature feature in Feature.values) { @@ -33,13 +41,7 @@ Future main() async { await Arcane.logger.registerInterface( debugPrintInterface, interceptors: [ - LogInterceptor((event, context) { - if (context.interface is DebugPrint && Feature.logging.disabled) { - return null; - } - - return event; - }), + LogInterceptor(skipDebugPrintWhenDisabled), ], ); diff --git a/lib/src/services/logging/log_interceptor.dart b/lib/src/services/logging/log_interceptor.dart index 1a2500f..fd94f69 100644 --- a/lib/src/services/logging/log_interceptor.dart +++ b/lib/src/services/logging/log_interceptor.dart @@ -30,6 +30,12 @@ final class LogInterceptorContext { final LoggingInterface? interface; } +/// Signature for callbacks used by [LogInterceptor]. +typedef LogInterceptorCallback = LogEvent? Function( + LogEvent event, + LogInterceptorContext context, +); + /// A function-like object that intercepts and optionally transforms log events. /// /// [LogInterceptor] allows you to observe, modify, or suppress log events as @@ -39,11 +45,12 @@ final class LogInterceptorContext { /// /// Example usage: /// ```dart -/// final interceptor = CallbackLogInterceptor((event, context) { +/// final LogInterceptorCallback callback = (event, context) { /// // Filter out debug-level logs /// if (event.level == Level.debug) return null; /// return event; -/// }); +/// }; +/// final interceptor = LogInterceptor(callback); /// ``` /// /// See also: @@ -54,10 +61,7 @@ abstract class LogInterceptor { /// /// This keeps inline interceptor usage ergonomic. const factory LogInterceptor( - LogEvent? Function( - LogEvent event, - LogInterceptorContext context, - ) callback, + LogInterceptorCallback callback, ) = CallbackLogInterceptor; /// Invokes the interceptor on the given [event] and [context]. @@ -74,10 +78,7 @@ final class CallbackLogInterceptor implements LogInterceptor { /// Creates a callback-backed interceptor. const CallbackLogInterceptor(this._callback); - final LogEvent? Function( - LogEvent event, - LogInterceptorContext context, - ) _callback; + final LogInterceptorCallback _callback; @override LogEvent? call( diff --git a/pubspec.yaml b/pubspec.yaml index 48a4c53..23c6afb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: arcane_framework description: "Agnostic Reusable Component Architecture for New Ecosystems: a modern framework for bootstrapping new applications" -version: 2.0.3 +version: 2.0.4 repository: https://github.com/hanskokx/arcane_framework issue_tracker: https://github.com/hanskokx/arcane_framework/issues