Skip to content

Commit 4520ead

Browse files
committed
Enhance log viewer: display log levels in uppercase and streamline log entry grouping
1 parent 7f5e99a commit 4520ead

File tree

2 files changed

+35
-40
lines changed

2 files changed

+35
-40
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
1111
- Improved the user interface of the webview panel.
1212
- Added line number formatting with leading zeros.
1313
- Removed timestamp and dot from log entries in the summary.
14+
### Changed
15+
- Log levels are now displayed in uppercase format (e.g. ERROR, WARN, DEBUG, INFO, ...)
1416

1517
### Fixed
1618
- Fixed potential security issue with non-literal argument in `fs.existsSync`.

src/logViewer.ts

Lines changed: 33 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)