fontcolor_theme
Deepkit App

Logger

Deepkit Logger 是一个独立的库,提供一个主要的 Logger 类用于记录日志信息。该类会自动在 Deepkit 应用的依赖注入容器中可用。

Logger 类提供了多个方法,它们的行为与 console.log 一致。

logger.error()错误1
logger.warning()警告2
logger.log()默认日志3
logger.info()特殊信息4
logger.debug()调试信息5

默认情况下,logger 的级别是 info,也就是说它只处理 info 以及更高(即 log、warning、error,但不包括 debug)的消息。要更改日志级别,例如调用 logger.level = 5

在应用中使用

要在 Deepkit 应用中使用 logger,只需将 Logger 注入到你的服务或控制器中。

import { Logger } from '@deepkit/logger';
import { App } from '@deepkit/app';

const app = new App();
app.command('test', (logger: Logger) => {
    logger.log('This is a <yellow>log message</yellow>');
});

app.run();

颜色

logger 支持彩色日志消息。你可以通过使用包裹目标文本的 XML 标签来提供颜色。

const username = 'Peter';
logger.log(`Hi <green>${username}</green>`);

对于不支持颜色的传输器,会自动移除颜色信息。在默认传输器(ConsoleTransport)中会显示颜色。可用的颜色包括:blackredgreenbluecyanmagentawhitegrey/gray

传输器

你可以配置单个传输器或多个传输器。在 Deepkit 应用中,会自动配置 ConsoleTransport 传输器。要配置额外的传输器,可以使用设置调用

import { Logger, LoggerTransport } from '@deepkit/logger';

export class MyTransport implements LoggerTransport {
    write(message: string, level: LoggerLevel, rawMessage: string) {
        process.stdout.write(JSON.stringify({message: rawMessage, level, time: new Date}) + '\n');
    }

    supportsColor() {
        return false;
    }
}

new App()
    .setup((module, config) => {
        module.configureProvider<Logger>(v => v.addTransport(new MyTransport));
    })
    .run();

要用一组新的传输器替换所有传输器,请使用 setTransport

import { Logger } from '@deepkit/logger';

new App()
.setup((module, config) => {
    module.configureProvider<Logger>(v => v.setTransport([new MyTransport]));
})
.run();
import { Logger, JSONTransport } from '@deepkit/logger';

new App()
    .setup((module, config) => {
        module.configureProvider<Logger>(v => v.setTransport([new JSONTransport]));
    })
    .run();

作用域 Logger

作用域 logger 会为每条日志添加任意的区域名称,这有助于判断日志来自应用的哪个子区域。

const scopedLogger = logger.scoped('database');
scopedLogger.log('Query', query);

还提供了 ScopedLogger 类型,你可以将其注入到服务中来获取带作用域的 logger。

import { ScopedLogger } from '@deepkit/logger';

class MyService {
    constructor(protected logger: ScopedLogger) {}
    doSomething() {
        this.logger.log('This is wild');
    }
}

现在,来自作用域 logger 的所有消息都会带有 MyService 作用域名称前缀。

格式化器

通过格式化器,你可以更改消息格式,例如添加时间戳。当应用通过 server:start 启动时,如果没有其他可用的格式化器,会自动添加 DefaultFormatter(它会添加时间戳、范围和日志级别)。

上下文数据

要向日志条目添加上下文数据,只需将一个简单的对象字面量作为最后一个参数添加。只有至少两个参数的日志调用才可以包含上下文数据。

const query = 'SELECT *';
const user = new User;
logger.log('Query', {query, user}); //最后一个参数是上下文数据
logger.log('Another', 'wild log entry', query, {user}); //最后一个参数是上下文数据

logger.log({query, user}); //这不会被当作上下文数据处理。
English中文 (Chinese)한국어 (Korean)日本語 (Japanese)Deutsch (German)