Skip to content

Commit

Permalink
feat: add ability to specify custom level and additional fields on `T…
Browse files Browse the repository at this point in the history
…racer.stop` call

Signed-off-by: Roman Vanesyan <[email protected]>
  • Loading branch information
roman-vanesyan committed Mar 10, 2021
1 parent b20d112 commit f24e9b3
Show file tree
Hide file tree
Showing 12 changed files with 61 additions and 19 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# CHANGELOG.md
# 1.0.0
* Add ability to specify custom severity level on `Tracer.stop` call.
* Add ability to specify additional context fields on `Tracer.stop` call.

# 1.0.0-rc.3
# 1.0.0-rc.2
* **BREAKING CHANGE** Null-safety

Expand Down
2 changes: 1 addition & 1 deletion example/complex_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Future<void> main() async {
const Str('mime', 'image/png'),
});

final tracer = context.trace('Uploading!', Level.info);
final tracer = context.trace('Uploading!', level: Level.info);

// Emulate uploading, wait for 1 sec.
await Future<void>.delayed(const Duration(seconds: 1));
Expand Down
2 changes: 1 addition & 1 deletion example/console_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Future<void> main() async {
const Str('mime', 'image/png'),
});

final tracer = context.trace('Uploading!', Level.info);
final tracer = context.trace('Uploading!', level: Level.info);

// Emulate uploading, wait for 1 sec.
await Future<void>.delayed(const Duration(seconds: 1));
Expand Down
4 changes: 2 additions & 2 deletions lib/global_logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ void debug(String message) => _logger.debug(message);
/// severity level; to stop tracing call [Tracer.stop] on the returned tracer.
///
/// See more [Interface.trace].
Tracer trace(String message, [Level level = Level.debug]) =>
_logger.trace(message, level);
Tracer trace(String message, {Level level = Level.debug}) =>
_logger.trace(message, level: level);

/// Emits a record with [message] and [Level.info] severity level.
///
Expand Down
2 changes: 1 addition & 1 deletion lib/src/interface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ abstract class Interface {

/// Starts tracing and emits a record with [message] and [level]
/// severity level; to stop tracing call [Tracer.stop] on the returned tracer.
Tracer trace(String message, [Level level = Level.debug]);
Tracer trace(String message, {Level level = Level.debug});

/// Creates and returns a new logging context with bound collection of
/// [fields] added to existing one.
Expand Down
4 changes: 2 additions & 2 deletions lib/src/logger_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ class LoggerImpl with LoggerBase {
void log(Level level, String message) => _context.log(level, message);

@override
Tracer trace(String message, [Level level = Level.debug]) =>
_context.trace(message, level);
Tracer trace(String message, {Level level = Level.debug}) =>
_context.trace(message, level: level);

@override
@pragma('vm:prefer-inline')
Expand Down
2 changes: 1 addition & 1 deletion lib/src/logging_context.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,6 @@ class LoggingContext implements Interface {
});

@override
Tracer trace(String message, [Level level = Level.debug]) =>
Tracer trace(String message, {Level level = Level.debug}) =>
TracerImpl(this, level)..start(message);
}
9 changes: 6 additions & 3 deletions lib/src/noop_logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,17 @@ import 'package:jetlog/src/tracer.dart';
class NoopTracer implements Tracer {
@override
@pragma('vm:prefer-inline')
void stop(String message) {}
void stop(String message, {Level? level, Iterable<Field>? fields}) {}
}

class NoopLogger with LoggerBase {
NoopLogger([this.name]);

Level? _level;

static final NoopLogger _logger = NoopLogger();
static final NoopTracer _tracer = NoopTracer();

@override
set level(Level? level) {
_level = level;
Expand All @@ -30,7 +33,7 @@ class NoopLogger with LoggerBase {

@override
@pragma('vm:prefer-inline')
Interface bind([Iterable<Field>? fields]) => NoopLogger();
Interface bind([Iterable<Field>? fields]) => _logger;

@override
set handler(Handler? handler) {
Expand All @@ -43,7 +46,7 @@ class NoopLogger with LoggerBase {
}

@override
Tracer trace(String message, [Level level = Level.debug]) => NoopTracer();
Tracer trace(String message, {Level level = Level.debug}) => _tracer;

@override
void log(Level level, String message) {
Expand Down
4 changes: 3 additions & 1 deletion lib/src/tracer.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import 'package:jetlog/src/field.dart' show Field;
import 'package:jetlog/src/interface.dart';
import 'package:jetlog/src/level.dart' show Level;

/// Tracer is used to measure time between [Interface.trace] and [Tracer.stop]
/// calls.
Expand All @@ -8,5 +10,5 @@ abstract class Tracer {
///
/// If [stop] is called more than once a [TracerStoppedError]
/// will be raised.
void stop(String message);
void stop(String message, {Level? level, Iterable<Field>? fields});
}
9 changes: 6 additions & 3 deletions lib/src/tracer_impl.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:jetlog/src/field.dart' show Dur, DTM;
import 'package:jetlog/src/field.dart' show Field, Dur, DTM;
import 'package:jetlog/src/interface.dart';
import 'package:jetlog/src/level.dart';
import 'package:jetlog/src/tracer.dart';
Expand All @@ -22,11 +22,14 @@ class TracerImpl implements Tracer {
}

@override
void stop(String message) {
void stop(String message, {Level? level, Iterable<Field>? fields}) {
if (_timer.isRunning) {
_timer.stop();
stopAt = DateTime.now();
_context.bind({Dur('duration', _timer.elapsed)}).log(_level, message);
_context.bind({
Dur('duration', _timer.elapsed),
if (fields != null) ...fields
}).log(level ?? _level, message);
}
}

Expand Down
6 changes: 3 additions & 3 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: jetlog
version: 1.0.0-rc.3
version: 1.0.0
license: MIT
description: >
Compact and robust structured logger for Dart.
Expand All @@ -10,10 +10,10 @@ description: >
homepage: https://github.com/vanesyan/jetlog.dart

environment:
sdk: '>=2.12.0-0 <3.0.0'
sdk: '>=2.12.0 <3.0.0'

dependencies:
meta: ^1.3.0

dev_dependencies:
test: ^1.16.3
test: ^1.16.7
31 changes: 30 additions & 1 deletion test/interface_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@ void main() {
..handler = handler
..level = Level.all;

logger.trace('start', Level.fatal).stop('stop');
logger.trace('start', level: Level.fatal).stop('stop');

await later(() {
expect(handler.records.first.level == Level.fatal, isTrue);
Expand All @@ -660,6 +660,35 @@ void main() {
});
});

test('accepts additional fields on stop', () async {
final handler = MemoryHandler();
final logger = Logger.detached()
..handler = handler
..level = Level.all;

const fields = [Str('test1', 'test1'), Str('test2', 'test2')];
logger.trace('start').stop('stop', fields: fields);

await later(() {
final record = handler.records.elementAt(1);
expect(List<Field>.from(record.fields!), containsAll(fields));
});
});

test('accepts custom level on stop', () async {
final handler = MemoryHandler();
final logger = Logger.detached()
..handler = handler
..level = Level.all;

logger.trace('start').stop('stop', level: Level.fatal);

await later(() {
final record = handler.records.elementAt(1);
expect(record.level, equals(Level.fatal));
});
});

test('allows custom level method extensions', () async {
final handler = MemoryHandler();
final logger = Logger.detached()
Expand Down

0 comments on commit f24e9b3

Please sign in to comment.