diff --git a/lib/src/services/logging/logging_interface_extensions.dart b/lib/src/services/logging/logging_interface_extensions.dart deleted file mode 100644 index 0f0459a..0000000 --- a/lib/src/services/logging/logging_interface_extensions.dart +++ /dev/null @@ -1,26 +0,0 @@ -mixin class FileAndLineNumber { - static String get _parts => StackTrace.current - .toString() - .split("\n")[2] - .split(RegExp("#2"))[1] - .trim(); - - static String? get module => - _parts.split(".").firstOrNull?.replaceFirst("new ", ""); - static String? get method { - if (_parts.length <= 1) return null; - return _parts[1].split(" ").firstOrNull?.replaceAll(" fileAndLineParts = [ - ...?_parts.split("(package:").lastOrNull?.split(":"), - ]; - - if (fileAndLineParts.length <= 2) { - return fileAndLineParts.firstOrNull; - } - - return "${fileAndLineParts[0]}:${fileAndLineParts[1]}"; - } -} diff --git a/lib/src/services/logging/logging_service.dart b/lib/src/services/logging/logging_service.dart index 40551cd..c18febb 100644 --- a/lib/src/services/logging/logging_service.dart +++ b/lib/src/services/logging/logging_service.dart @@ -1,6 +1,6 @@ import "dart:async"; +import "dart:developer" as dev; -import "package:arcane_framework/src/services/logging/logging_interface_extensions.dart"; import "package:arcane_helper_utils/arcane_helper_utils.dart"; part "logging_enums.dart"; @@ -12,7 +12,7 @@ part "logging_interface.dart"; /// The `ArcaneLogger` provides a centralized way to log messages across /// different parts of an application. It supports multiple logging interfaces, /// metadata, and platform-specific error handling. -class ArcaneLogger with FileAndLineNumber { +class ArcaneLogger { ArcaneLogger._internal(); static final ArcaneLogger _instance = ArcaneLogger._internal(); @@ -176,45 +176,67 @@ class ArcaneLogger with FileAndLineNumber { } metadata ??= {}; - metadata.putIfAbsent("timestamp", () => DateTime.now().toIso8601String()); + String? parts; + String? filenameAndLineNumber; + if (!skipAutodetection) { + try { + parts = StackTrace.current + .toString() + .split("\n")[2] + .split(RegExp("#2"))[1] + .trim(); + } catch (_) {} + + module ??= parts?.split(".").firstOrNull?.replaceFirst("new ", ""); + + method ??= ((parts?.split(".").length ?? 0) <= 1) + ? null + : parts + ?.split(".")[1] + .split(" ") + .firstOrNull + ?.replaceAll(" fileAndLineParts = [ + ...?parts?.split("(package:").lastOrNull?.split(":"), + ]; + + if (fileAndLineParts.length <= 2) { + filenameAndLineNumber = fileAndLineParts.firstOrNull; + } else { + filenameAndLineNumber = "${fileAndLineParts[0]}:${fileAndLineParts[1]}"; + } + } + + // Module management if (module.isNotEmptyOrNull) { metadata.putIfAbsent("module", () => module!); - } else if (!metadata.containsKey("module") && - metadata["module"].isNullOrEmpty) { - try { - if (FileAndLineNumber.module.isNotNullOrEmpty) { - metadata.putIfAbsent("module", () => FileAndLineNumber.module!); - } - } catch (_) {} } + // Method managmeent if (method.isNotEmptyOrNull) { metadata.putIfAbsent("method", () => method!); - } else if (!metadata.containsKey("method") && - metadata["method"].isNullOrEmpty) { - try { - if (FileAndLineNumber.method.isNotNullOrEmpty) { - metadata.putIfAbsent("method", () => FileAndLineNumber.method!); - } - } catch (_) {} } - if (!metadata.containsKey("filenameAndLineNumber") && - metadata["filenameAndLineNumber"].isNullOrEmpty) { - try { - if (FileAndLineNumber.fileAndLine.isNotNullOrEmpty) { - metadata.putIfAbsent( - "filenameAndLineNumber", - () => FileAndLineNumber.fileAndLine!, - ); - } - } catch (_) {} + // Filename and line number management + if (filenameAndLineNumber.isNotNullOrEmpty) { + metadata.putIfAbsent( + "filenameAndLineNumber", + () => filenameAndLineNumber!, + ); } metadata.addAll(additionalMetadata); + module ??= metadata.containsKey("module") ? metadata["module"] : null; + method ??= metadata.containsKey("method") ? metadata["method"] : null; + + dev.log( + "Module: $module, Method: $method", + ); + // Send logs to registered interface(s) for (final LoggingInterface i in I._interfaces) { i.log(