@@ -32,36 +32,49 @@ export namespace DaemonLog {
32
32
const segments = toLog . split ( 'time' ) . filter ( s => s . trim ( ) . length > 0 ) ;
33
33
for ( const segment of segments ) {
34
34
const maybeDaemonLog = parse ( `time${ segment } ` . trim ( ) ) ;
35
- if ( is ( maybeDaemonLog ) ) {
36
- const { msg } = maybeDaemonLog ;
37
- logger . log ( toLogLevel ( maybeDaemonLog ) , msg ) ;
38
- } else {
39
- logger . info ( toLog . trim ( ) ) ;
35
+ for ( const logMsg of maybeDaemonLog ) {
36
+ logger . log ( toLogLevel ( logMsg ) , logMsg . msg ) ;
40
37
}
41
38
}
42
39
}
43
40
44
41
// Super naive.
45
- function parse ( toLog : string ) : string | DaemonLog {
46
- const rawSegments = toLog . split ( / ( \s + ) / )
47
- . map ( segment => segment . replace ( / [ ' " ] + / g, '' ) )
48
- . map ( segment => segment . trim ( ) )
49
- . filter ( segment => segment . length > 0 ) ;
42
+ function parse ( toLog : string ) : DaemonLog [ ] {
43
+ const messages = toLog . split ( '\ntime=' ) ;
44
+ const result : DaemonLog [ ] = [ ] ;
45
+ for ( let i = 0 ; i < messages . length ; i ++ ) {
46
+ const msg = ( i > 0 ? 'time=' : '' ) + messages [ i ] ;
47
+ const rawSegments = msg . split ( / ( \s + ) / )
48
+ . map ( segment => segment . replace ( / [ ' " ] + / g, '' ) )
49
+ . map ( segment => segment . trim ( ) )
50
+ . filter ( segment => segment . length > 0 ) ;
50
51
51
- const timeIndex = rawSegments . findIndex ( segment => segment . startsWith ( 'time=' ) ) ;
52
- const levelIndex = rawSegments . findIndex ( segment => segment . startsWith ( 'level=' ) ) ;
53
- const msgIndex = rawSegments . findIndex ( segment => segment . startsWith ( 'msg=' ) ) ;
54
- if ( rawSegments . length > 2
55
- && timeIndex !== - 1
56
- && levelIndex !== - 1
57
- && msgIndex !== - 1 ) {
58
- return {
59
- time : rawSegments [ timeIndex ] . split ( '=' ) [ 1 ] ,
60
- level : rawSegments [ levelIndex ] . split ( '=' ) [ 1 ] as Level ,
61
- msg : [ rawSegments [ msgIndex ] . split ( '=' ) [ 1 ] , ...rawSegments . slice ( msgIndex + 1 ) ] . join ( ' ' )
62
- }
52
+ const timeIndex = rawSegments . findIndex ( segment => segment . startsWith ( 'time=' ) ) ;
53
+ const levelIndex = rawSegments . findIndex ( segment => segment . startsWith ( 'level=' ) ) ;
54
+ const msgIndex = rawSegments . findIndex ( segment => segment . startsWith ( 'msg=' ) ) ;
55
+ if ( rawSegments . length > 2
56
+ && timeIndex !== - 1
57
+ && levelIndex !== - 1
58
+ && msgIndex !== - 1 ) {
59
+ result . push ( {
60
+ time : rawSegments [ timeIndex ] . split ( '=' ) [ 1 ] ,
61
+ level : rawSegments [ levelIndex ] . split ( '=' ) [ 1 ] as Level ,
62
+ msg : [ rawSegments [ msgIndex ] . split ( '=' ) [ 1 ] , ...rawSegments . slice ( msgIndex + 1 ) ] . join ( ' ' )
63
+ } ) ;
64
+ } else {
65
+ result . push ( {
66
+ time : new Date ( ) . toString ( ) ,
67
+ level : 'info' ,
68
+ msg : msg
69
+ } ) ;
70
+ }
63
71
}
64
72
// Otherwise, log the string as is.
65
- return toLog ;
73
+ return result ;
74
+ }
75
+
76
+ export function toPrettyString ( logMessage : string ) : string {
77
+ const parsed = parse ( logMessage ) ;
78
+ return parsed . map ( msg => `[${ msg . level . toUpperCase ( ) || 'INFO' } ] ${ msg . msg } \n` ) . join ( '' ) ;
66
79
}
67
80
}
0 commit comments