From 3c6a7a51bf466099452a37ae8e7e6dcf35eb037a Mon Sep 17 00:00:00 2001 From: Emil Tullstedt Date: Wed, 4 Mar 2020 09:48:21 +0100 Subject: [PATCH] Logs: Improve log level guess (#22094) Fixes #22075 --- packages/grafana-data/src/utils/logs.test.ts | 1 + packages/grafana-data/src/utils/logs.ts | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) 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 {