@@ -74,22 +74,24 @@ export class LogViewerProvider implements vscode.TreeDataProvider<LogFile>, vsco
7474 }
7575
7676 private groupLogEntries ( lines : string [ ] ) : LogFile [ ] {
77- const grouped : { [ key : string ] : string [ ] } = { ERROR : [ ] , WARN : [ ] , INFO : [ ] } ;
77+ const grouped : { [ key : string ] : string [ ] } = { } ;
78+
7879 lines . forEach ( line => {
79- if ( line . includes ( '.ERROR:' ) ) {
80- grouped . ERROR . push ( line ) ;
81- } else if ( line . includes ( '.WARN:' ) ) {
82- grouped . WARN . push ( line ) ;
83- } else if ( line . includes ( '.INFO:' ) ) {
84- grouped . INFO . push ( line ) ;
80+ const match = line . match ( / \. ( \w + ) : / ) ;
81+ if ( match ) {
82+ const level = match [ 1 ] ;
83+ if ( ! grouped [ level ] ) {
84+ grouped [ level ] = [ ] ;
85+ }
86+ grouped [ level ] . push ( line ) ;
8587 }
8688 } ) ;
8789
88- const summary = [
89- new LogFile ( `ERROR: ${ grouped . ERROR . length } entries` , vscode . TreeItemCollapsibleState . Collapsed , undefined , grouped . ERROR . map ( ( line , index ) => new LogFile ( `Line ${ index + 1 } : ${ line } ` , vscode . TreeItemCollapsibleState . None ) ) ) ,
90- new LogFile ( `WARN: ${ grouped . WARN . length } entries` , vscode . TreeItemCollapsibleState . Collapsed , undefined , grouped . WARN . map ( ( line , index ) => new LogFile ( `Line ${ index + 1 } : ${ line } ` , vscode . TreeItemCollapsibleState . None ) ) ) ,
91- new LogFile ( `INFO: ${ grouped . INFO . length } entries` , vscode . TreeItemCollapsibleState . Collapsed , undefined , grouped . INFO . map ( ( line , index ) => new LogFile ( `Line ${ index + 1 } : ${ line } ` , vscode . TreeItemCollapsibleState . None ) ) )
92- ] ;
90+ const summary = Object . keys ( grouped ) . map ( level => {
91+ const count = grouped [ level ] . length ;
92+ const label = ` ${ level } ( ${ count } )` ;
93+ return new LogFile ( label , vscode . TreeItemCollapsibleState . Collapsed , undefined , grouped [ level ] . map ( ( line , index ) => new LogFile ( `Line ${ index + 1 } : ${ line } ` , vscode . TreeItemCollapsibleState . None ) ) ) ;
94+ } ) ;
9395
9496 return summary ;
9597 }
@@ -146,7 +148,7 @@ export class LogFile extends vscode.TreeItem {
146148 this . label = this . label . replace ( / \( \d + \) / , '' ) . trim ( ) ;
147149 }
148150
149- iconPath = new vscode . ThemeIcon ( 'file ' ) ;
151+ iconPath = new vscode . ThemeIcon ( 'list ' ) ;
150152
151153 contextValue = 'logFile' ;
152154 description = '' ;
0 commit comments