diff --git a/public/app/core/logs_model.test.ts b/public/app/core/logs_model.test.ts index a2e0f9da9c5..1fc68c61359 100644 --- a/public/app/core/logs_model.test.ts +++ b/public/app/core/logs_model.test.ts @@ -871,6 +871,36 @@ describe('logSeriesToLogsModel', () => { }, ]); }); + + it('should correctly get the log level if the message has ANSI color', () => { + const logSeries: DataFrame[] = [ + toDataFrame({ + fields: [ + { + name: 'ts', + type: FieldType.time, + values: ['1970-01-01T00:00:01Z'], + }, + { + name: 'line', + type: FieldType.string, + values: ['Line with ANSI \u001B[31mwarn\u001B[0m et dolor'], + }, + { + name: 'id', + type: FieldType.string, + values: ['0'], + }, + ], + refId: 'A', + meta: {}, + }), + ]; + + const logsModel = dataFrameToLogsModel(logSeries, 0); + expect(logsModel.rows).toHaveLength(1); + expect(logsModel.rows[0].logLevel).toEqual(LogLevel.warn); + }); }); describe('getSeriesProperties()', () => { diff --git a/public/app/core/logs_model.ts b/public/app/core/logs_model.ts index 9b36631eb86..2dd5eae8ae0 100644 --- a/public/app/core/logs_model.ts +++ b/public/app/core/logs_model.ts @@ -359,6 +359,7 @@ export function logSeriesToLogsModel(logSeries: DataFrame[]): LogsModel | undefi const hasUnescapedContent = !!message.match(/\\n|\\t|\\r/); const searchWords = series.meta && series.meta.searchWords ? series.meta.searchWords : []; + const entry = hasAnsi ? ansicolor.strip(message) : message; let logLevel = LogLevel.unknown; if (logLevelField && logLevelField.values.get(j)) { @@ -366,7 +367,7 @@ export function logSeriesToLogsModel(logSeries: DataFrame[]): LogsModel | undefi } else if (seriesLogLevel) { logLevel = seriesLogLevel; } else { - logLevel = getLogLevel(message); + logLevel = getLogLevel(entry); } rows.push({ entryFieldIndex: stringField.index, @@ -382,7 +383,7 @@ export function logSeriesToLogsModel(logSeries: DataFrame[]): LogsModel | undefi hasAnsi, hasUnescapedContent, searchWords, - entry: hasAnsi ? ansicolor.strip(message) : message, + entry, raw: message, labels: stringField.labels || {}, uid: idField ? idField.values.get(j) : j.toString(),