diff --git a/public/app/features/explore/Logs/LogsMetaRow.tsx b/public/app/features/explore/Logs/LogsMetaRow.tsx index 1ed09165690..8e4f4a8b5fc 100644 --- a/public/app/features/explore/Logs/LogsMetaRow.tsx +++ b/public/app/features/explore/Logs/LogsMetaRow.tsx @@ -1,16 +1,7 @@ import { css } from '@emotion/css'; -import { memo } from 'react'; +import { memo, useMemo } from 'react'; -import { - LogsDedupStrategy, - LogsMetaItem, - LogsMetaKind, - LogRowModel, - CoreApp, - Labels, - store, - shallowCompare, -} from '@grafana/data'; +import { LogsDedupStrategy, LogsMetaItem, LogsMetaKind, LogRowModel, CoreApp, Labels, store } from '@grafana/data'; import { Trans, t } from '@grafana/i18n'; import { config, reportInteraction } from '@grafana/runtime'; import { Button, Dropdown, Menu, ToolbarButton, useStyles2 } from '@grafana/ui'; @@ -58,6 +49,14 @@ export const LogsMetaRow = memo( }: Props) => { const style = useStyles2(getStyles); + // Filter out default fields from displayedFields to show only user-added fields + const nonDefaultFields = useMemo(() => { + if (!displayedFields?.length || !defaultDisplayedFields?.length) { + return []; + } + return displayedFields.filter((field) => !defaultDisplayedFields.includes(field)); + }, [displayedFields, defaultDisplayedFields]); + const logsMetaItem: Array = [...meta]; // Add deduplication info @@ -69,16 +68,12 @@ export const LogsMetaRow = memo( }); } - // Add detected fields info - if ( - visualisationType === 'logs' && - displayedFields?.length > 0 && - shallowCompare(displayedFields, defaultDisplayedFields) === false - ) { + // Add detected fields info - only show when user has added fields beyond defaults + if (visualisationType === 'logs' && nonDefaultFields.length > 0) { logsMetaItem.push( { label: t('explore.logs-meta-row.label.showing-only-selected-fields', 'Showing only selected fields'), - value: , + value: , }, { label: '', diff --git a/public/app/features/logs/components/panel/LogListContext.tsx b/public/app/features/logs/components/panel/LogListContext.tsx index 6a4c33dc22f..44712978fe1 100644 --- a/public/app/features/logs/components/panel/LogListContext.tsx +++ b/public/app/features/logs/components/panel/LogListContext.tsx @@ -302,10 +302,8 @@ export const LogListContextProvider = ({ // 3. Always add LOG_LINE_BODY orderedFields.push(LOG_LINE_BODY_FIELD_NAME); - // 4. Add OTEL_LOG_ATTRIBUTES if it's in OTel fields - if (otelDisplayedFields.includes(OTEL_LOG_LINE_ATTRIBUTES_FIELD_NAME)) { - orderedFields.push(OTEL_LOG_LINE_ATTRIBUTES_FIELD_NAME); - } + // 4. Always add OTEL_LOG_ATTRIBUTES + orderedFields.push(OTEL_LOG_LINE_ATTRIBUTES_FIELD_NAME); // 5. Add any other OTel fields that aren't already included otelDisplayedFields.forEach((field) => { @@ -321,12 +319,12 @@ export const LogListContextProvider = ({ return orderedFields; }, [tableDefaultFields, otelDisplayedFields]); - // OTel displayed fields + // Pass default displayed fields (table defaults + OTel defaults) to parent useEffect(() => { - if (config.featureToggles.otelLogsFormatting && showLogAttributes !== false) { - onLogOptionsChange?.('defaultDisplayedFields', otelDisplayedFields); + if (defaultDisplayedFields.length > 0) { + onLogOptionsChange?.('defaultDisplayedFields', defaultDisplayedFields); } - }, [onLogOptionsChange, otelDisplayedFields, showLogAttributes]); + }, [onLogOptionsChange, defaultDisplayedFields]); // Set default displayed fields (table defaults + OTel defaults) when displayedFields is empty or missing table defaults useEffect(() => {