diff --git a/packages/grafana-data/src/utils/logs.test.ts b/packages/grafana-data/src/utils/logs.test.ts index 944c51f11b2..42fe2c36dc8 100644 --- a/packages/grafana-data/src/utils/logs.test.ts +++ b/packages/grafana-data/src/utils/logs.test.ts @@ -35,6 +35,7 @@ describe('getLoglevel()', () => { it('returns first log level found', () => { expect(getLogLevel('WARN this could be a debug message')).toBe(LogLevel.warn); + expect(getLogLevel('WARN this is a non-critical message')).toBe(LogLevel.warn); }); }); diff --git a/packages/grafana-data/src/utils/logs.ts b/packages/grafana-data/src/utils/logs.ts index 6889531b0ce..2915c4a5567 100644 --- a/packages/grafana-data/src/utils/logs.ts +++ b/packages/grafana-data/src/utils/logs.ts @@ -20,16 +20,21 @@ export function getLogLevel(line: string): LogLevel { if (!line) { return LogLevel.unknown; } + let level = LogLevel.unknown; + let currentIndex: number | undefined = undefined; + for (const key of Object.keys(LogLevel)) { const regexp = new RegExp(`\\b${key}\\b`, 'i'); - if (regexp.test(line)) { - const level = (LogLevel as any)[key]; - if (level) { - return level; + const result = regexp.exec(line); + + if (result) { + if (currentIndex === undefined || result.index < currentIndex) { + level = (LogLevel as any)[key]; + currentIndex = result.index; } } } - return LogLevel.unknown; + return level; } export function getLogLevelFromKey(key: string): LogLevel {