enhance: OTel設定時、JSONログにtrace_id, span_id, trace_flagがつくように (#17748)

* enhance: OTel設定時、JSONログにtrace_id, span_id, trace_flagがつくように

* fix
This commit is contained in:
おさむのひと
2026-07-20 19:00:54 +09:00
committed by GitHub
parent 36c442a7b4
commit bbd57c751c
17 changed files with 449 additions and 89 deletions
@@ -62,6 +62,23 @@ describe('JsonConsoleBackend', () => {
});
});
test('writes trace context using the standard JSON field names', () => {
const output = vi.fn<(line: string) => void>();
const backend = new JsonConsoleBackend({ output });
backend.write(createRecord({
traceId: '0123456789abcdef0123456789abcdef',
spanId: '0123456789abcdef',
traceFlags: 0,
}));
expect(JSON.parse(output.mock.calls[0][0])).toMatchObject({
trace_id: '0123456789abcdef0123456789abcdef',
span_id: '0123456789abcdef',
trace_flags: 0,
});
});
test('escapes newlines so each record remains one physical line', () => {
const output = vi.fn<(line: string) => void>();
const backend = new JsonConsoleBackend({ output });
@@ -5,7 +5,7 @@
import { describe, expect, test, vi } from 'vitest';
import type { LogBackend } from '@/logging/LogBackend.js';
import type { LogRecordInput } from '@/logging/types.js';
import type { LogRecordInput, LogTraceContext } from '@/logging/types.js';
import { LogManager } from '@/logging/LogManager.js';
/** テストで使う最小構成のログ入力を作成します。 */
@@ -87,6 +87,39 @@ describe('LogManager', () => {
});
});
test('adds active trace context to the record after filtering', () => {
const { manager, write } = createManager();
const traceContext: LogTraceContext = {
traceId: '0123456789abcdef0123456789abcdef',
spanId: '0123456789abcdef',
traceFlags: 0,
};
const provider = vi.fn(() => traceContext);
manager.setTraceContextProvider(provider);
manager.write(createInput());
expect(provider).toHaveBeenCalledOnce();
expect(write.mock.calls[0][0]).toMatchObject(traceContext);
});
test('does not get trace context for logs that will not be written', () => {
const provider = vi.fn(() => ({
traceId: '0123456789abcdef0123456789abcdef',
spanId: '0123456789abcdef',
traceFlags: 1,
}));
const filtered = createManager({ configuration: { level: 'warn' } });
filtered.manager.setTraceContextProvider(provider);
filtered.manager.write(createInput('info'));
const quiet = createManager({ quiet: true });
quiet.manager.setTraceContextProvider(provider);
quiet.manager.write(createInput('error'));
expect(provider).not.toHaveBeenCalled();
});
test('does not call the backend in quiet mode', () => {
const { manager, write } = createManager({ quiet: true, verbose: true });