@@ -75,58 +75,51 @@ export class LogViewerProvider implements vscode.TreeDataProvider<LogFile>, vsco
7575 }
7676
7777 private groupLogEntries ( lines : string [ ] , filePath : string ) : LogFile [ ] {
78- const grouped : { [ key : string ] : { line : string , lineNumber : number } [ ] } = { } ;
78+ const grouped = new Map < string , { line : string , lineNumber : number } [ ] > ( ) ;
7979
8080 lines . forEach ( ( line , index ) => {
8181 const match = line . match ( / \. ( \w + ) : / ) ;
8282 if ( match ) {
83- const level = match [ 1 ] ;
84- const message = line . replace ( / ^ \[ .* ?\] \s * \. \w + : \s * / , '' ) ; // Entfernt den Zeitstempel und den Punkt
85- if ( this . isValidLogLevel ( level ) ) {
86- if ( ! grouped [ level ] ) {
87- grouped [ level ] = [ ] ;
88- }
89- grouped [ level ] . push ( { line : message , lineNumber : index } ) ;
90- }
83+ const level = match [ 1 ] . toUpperCase ( ) ; // Changed to uppercase
84+ const message = line . replace ( / ^ \[ .* ?\] \s * \. \w + : \s * / , '' ) ;
85+ const entries = grouped . get ( level ) || [ ] ;
86+ entries . push ( { line : message , lineNumber : index } ) ;
87+ grouped . set ( level , entries ) ;
9188 }
9289 } ) ;
9390
94- const summary = Object . keys ( grouped ) . map ( level => {
95- const count = grouped [ level ] . length ;
91+ return Array . from ( grouped . entries ( ) ) . map ( ( [ level , entries ] ) => {
92+ const count = entries . length ;
9693 const label = `${ level } (${ count } )` ;
97- const logFile = new LogFile ( label , vscode . TreeItemCollapsibleState . Collapsed , undefined , grouped [ level ] . map ( entry => {
98- const lineNumber = ( entry . lineNumber + 1 ) . toString ( ) . padStart ( 2 , '0' ) ; // Zeilennummer mit führenden Nullen
99- return new LogFile ( `Line ${ lineNumber } : ${ entry . line } ` , vscode . TreeItemCollapsibleState . None , { // Fügen Sie hier den Abstand hinzu
100- command : 'magento-log-viewer.openFileAtLine' ,
101- title : 'Open Log File at Line' ,
102- arguments : [ filePath , entry . lineNumber ]
103- } ) ;
104- } ) ) ;
105- switch ( level . toLowerCase ( ) ) {
106- case 'error' :
107- logFile . iconPath = new vscode . ThemeIcon ( 'error' ) ;
108- break ;
109- case 'warn' :
110- logFile . iconPath = new vscode . ThemeIcon ( 'warning' ) ;
111- break ;
112- case 'debug' :
113- logFile . iconPath = new vscode . ThemeIcon ( 'debug' ) ;
114- break ;
115- case 'info' :
116- logFile . iconPath = new vscode . ThemeIcon ( 'info' ) ;
117- break ;
118- default :
119- logFile . iconPath = new vscode . ThemeIcon ( 'file' ) ;
120- }
94+ const logFile = new LogFile ( label , vscode . TreeItemCollapsibleState . Collapsed , undefined ,
95+ entries . map ( entry => {
96+ const lineNumber = ( entry . lineNumber + 1 ) . toString ( ) . padStart ( 2 , '0' ) ;
97+ return new LogFile (
98+ `Line ${ lineNumber } : ${ entry . line } ` ,
99+ vscode . TreeItemCollapsibleState . None ,
100+ {
101+ command : 'magento-log-viewer.openFileAtLine' ,
102+ title : 'Open Log File at Line' ,
103+ arguments : [ filePath , entry . lineNumber ]
104+ }
105+ ) ;
106+ } )
107+ ) ;
108+
109+ // Set icon based on known log levels, use default for others
110+ logFile . iconPath = this . getIconForLogLevel ( level ) ;
121111 return logFile ;
122112 } ) ;
123-
124- return summary ;
125113 }
126114
127- private isValidLogLevel ( level : string ) : boolean {
128- const validLevels = [ 'error' , 'warn' , 'debug' , 'info' ] ;
129- return validLevels . includes ( level . toLowerCase ( ) ) ;
115+ private getIconForLogLevel ( level : string ) : vscode . ThemeIcon {
116+ switch ( level ) { // Removed toLowerCase() since level is already uppercase
117+ case 'ERROR' : return new vscode . ThemeIcon ( 'error' ) ;
118+ case 'WARN' : return new vscode . ThemeIcon ( 'warning' ) ;
119+ case 'DEBUG' : return new vscode . ThemeIcon ( 'debug' ) ;
120+ case 'INFO' : return new vscode . ThemeIcon ( 'info' ) ;
121+ default : return new vscode . ThemeIcon ( 'circle-outline' ) ;
122+ }
130123 }
131124
132125 getLogFilesWithoutUpdatingBadge ( dir : string ) : LogFile [ ] {
0 commit comments