File tree Expand file tree Collapse file tree 3 files changed +80
-0
lines changed Expand file tree Collapse file tree 3 files changed +80
-0
lines changed Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ export 'src/outputs/stream_output.dart';
10
10
export 'src/outputs/memory_output.dart' ;
11
11
export 'src/printers/pretty_printer.dart' ;
12
12
export 'src/printers/simple_printer.dart' ;
13
+ export 'src/printers/logfmt_printer.dart' ;
13
14
14
15
export 'src/log_output.dart'
15
16
if (dart.library.io) 'src/outputs/file_output.dart' ;
Original file line number Diff line number Diff line change
1
+ import 'package:logger/src/log_printer.dart' ;
2
+ import 'package:logger/src/logger.dart' ;
3
+
4
+ /// Outputs a logfmt message:
5
+ /// ```
6
+ /// level=debug msg="hi there" time="2015-03-26T01:27:38-04:00" animal=walrus number=8 tag=usum
7
+ /// ```
8
+ class LogfmtPrinter extends LogPrinter {
9
+ static final levelPrefixes = {
10
+ Level .verbose: 'verbose' ,
11
+ Level .debug: 'debug' ,
12
+ Level .info: 'info' ,
13
+ Level .warning: 'warning' ,
14
+ Level .error: 'error' ,
15
+ Level .wtf: 'wtf' ,
16
+ };
17
+
18
+ @override
19
+ List <String > log (LogEvent event) {
20
+ var output = StringBuffer ("level=${levelPrefixes [event .level ]}" );
21
+ if (event.message is String ) {
22
+ output.write (' msg="${event .message }"' );
23
+ } else if (event.message is Map ) {
24
+ event.message.entries.forEach ((entry) {
25
+ if (entry.value is num ) {
26
+ output.write (' ${entry .key }=${entry .value }' );
27
+ } else {
28
+ output.write (' ${entry .key }="${entry .value }"' );
29
+ }
30
+ });
31
+ }
32
+
33
+ return [output.toString ()];
34
+ }
35
+ }
Original file line number Diff line number Diff line change
1
+ import 'package:test/test.dart' ;
2
+ import 'package:logger/logger.dart' ;
3
+
4
+ void main () {
5
+ var printer = LogfmtPrinter ();
6
+
7
+ test ('includes level' , () {
8
+ expect (
9
+ printer.log (LogEvent (
10
+ Level .debug,
11
+ "some message" ,
12
+ Exception ("boom" ),
13
+ StackTrace .current,
14
+ ))[0 ],
15
+ contains ("level=debug" ),
16
+ );
17
+ });
18
+
19
+ test ('with a string message includes a msg key' , () {
20
+ expect (
21
+ printer.log (LogEvent (
22
+ Level .debug,
23
+ "some message" ,
24
+ Exception ("boom" ),
25
+ StackTrace .current,
26
+ ))[0 ],
27
+ contains ('msg="some message"' ));
28
+ });
29
+
30
+ test ('includes random key=value pairs' , () {
31
+ var output = printer.log (LogEvent (
32
+ Level .debug,
33
+ {'a' : 123 , 'foo' : 'bar baz' },
34
+ Exception ("boom" ),
35
+ StackTrace .current,
36
+ ))[0 ];
37
+
38
+ expect (output, contains ("a=123" ));
39
+ expect (output, contains ('foo="bar baz"' ));
40
+ });
41
+
42
+ test ('handles a stacktrace' , () {}, skip: "TODO" );
43
+ test ('handles an error/exception' , () {}, skip: "TODO" );
44
+ }
You can’t perform that action at this time.
0 commit comments