TTeamDesk 学习手册

tests/worker-logger.test.ts

此代码来自构建时的仓库快照。修改源码后重新构建即可更新。

ts
import { afterEach, describe, expect, it, vi } from 'vitest';
import { createWorkerLogger } from '@/server/jobs/logger';
afterEach(() => vi.unstubAllEnvs());
describe('Worker 结构化日志', () => {
  it('保留任务定位信息并隐藏凭据', () => {
    vi.stubEnv('LOG_LEVEL', 'info');
    const lines: string[] = [];
    const logger = createWorkerLogger({
      write: (line) => {
        lines.push(line);
      },
    });
    logger.info(
      {
        event: 'task.started',
        taskId: 'test-id',
        run: 2,
        password: 'private-value',
        headers: { cookie: 'session-value' },
        DATABASE_URL: 'private-db',
      },
      '开始执行任务',
    );
    const record = JSON.parse(lines[0]);
    expect(record).toMatchObject({
      event: 'task.started',
      taskId: 'test-id',
      run: 2,
      service: 'teamdesk-worker',
      password: '[已隐藏]',
    });
    expect(lines[0]).not.toContain('private-value');
    expect(lines[0]).not.toContain('session-value');
    expect(lines[0]).not.toContain('private-db');
  });
  it('日志级别过滤调试信息,拒绝无效配置', () => {
    vi.stubEnv('LOG_LEVEL', 'warn');
    const lines: string[] = [];
    const logger = createWorkerLogger({
      write: (line) => {
        lines.push(line);
      },
    });
    logger.info('不会输出');
    logger.warn('需要输出');
    expect(lines).toHaveLength(1);
    vi.stubEnv('LOG_LEVEL', 'invalid');
    expect(() => createWorkerLogger()).toThrow('LOG_LEVEL 配置无效');
  });
});

搜索教程

输入关键词,搜索全部章节。

阅读设置

外观
正文字号

从一张工单出发,读懂数据如何流转。

设置与进度仅保存在当前浏览器。