mirror of
https://github.com/hanskokx/arcane_framework.git
synced 2026-08-12 06:10:55 +02:00
v2.0.4: Enhance LogInterceptor with callback support
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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),
|
||||
],
|
||||
);
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user