v2.0.4: Enhance LogInterceptor with callback support

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-06-01 17:38:43 +02:00
parent 90146653d0
commit fe42eac0dc
5 changed files with 46 additions and 24 deletions
+7
View File
@@ -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
+18 -6
View File
@@ -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;
+9 -7
View File
@@ -23,6 +23,14 @@ Future<void> 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<void> 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),
],
);
+11 -10
View File
@@ -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(
+1 -1
View File
@@ -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