Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit 7a7bd5e

Browse files
authored
Override empty stack traces for traced events (#158)
We already default to the current stack trace of the logging caller when there is no stack trace available so the author has some signal for where to look in the code. Also default for non-null but empty stack traces. This is more useful where an empty trace was passed through some signature to satisfy nullability requirements and forwarded to the log.
1 parent cbaf4ee commit 7a7bd5e

File tree

4 files changed

+25
-3
lines changed

4 files changed

+25
-3
lines changed

CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
## 1.2.1-wip
1+
## 1.3.0-wip
22

3+
* Override empty stack traces for trace level events.
34
* Require Dart 3.2
45

56
## 1.2.0

lib/src/logger.dart

+6-1
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,10 @@ class Logger {
202202
/// was made. This can be advantageous if a log listener wants to handler
203203
/// records of different zones differently (e.g. group log records by HTTP
204204
/// request if each HTTP request handler runs in it's own zone).
205+
///
206+
/// If this record is logged at a level equal to or higher than
207+
/// [recordStackTraceAtLevel] and [stackTrace] is `null` or [StackTrace.empty]
208+
/// it will be defaulted to the current stack trace for this call.
205209
void log(Level logLevel, Object? message,
206210
[Object? error, StackTrace? stackTrace, Zone? zone]) {
207211
Object? object;
@@ -218,7 +222,8 @@ class Logger {
218222
object = message;
219223
}
220224

221-
if (stackTrace == null && logLevel >= recordStackTraceAtLevel) {
225+
if ((stackTrace == null || stackTrace == StackTrace.empty) &&
226+
logLevel >= recordStackTraceAtLevel) {
222227
stackTrace = StackTrace.current;
223228
error ??= 'autogenerated stack trace for $logLevel $msg';
224229
}

pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: logging
2-
version: 1.2.1-wip
2+
version: 1.3.0-wip
33
description: >-
44
Provides APIs for debugging and error logging, similar to loggers in other
55
languages, such as the Closure JS Logger and java.util.logging.Logger.

test/logging_test.dart

+16
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,22 @@ void main() {
690690
expect(records[2].stackTrace, isNull);
691691
});
692692

693+
test('defaults a missing trace', () {
694+
final records = <LogRecord>[];
695+
recordStackTraceAtLevel = Level.SEVERE;
696+
root.onRecord.listen(records.add);
697+
root.severe('hello');
698+
expect(records.single.stackTrace, isNotNull);
699+
});
700+
701+
test('defaults an empty trace', () {
702+
final records = <LogRecord>[];
703+
recordStackTraceAtLevel = Level.SEVERE;
704+
root.onRecord.listen(records.add);
705+
root.severe('hello', 'error', StackTrace.empty);
706+
expect(records.single.stackTrace, isNot(StackTrace.empty));
707+
});
708+
693709
test('provided trace is used if given', () {
694710
final trace = StackTrace.current;
695711
final records = <LogRecord>[];

0 commit comments

Comments
 (0)