日志链接
LogSink是一个简单的日志包,允许将日志发送到多个目的地. 这些目的地被称为"地道".
使用量
软件包提供了LogSink作为默认导出的一个单通实例:
import LogSink from '@chax-at/log-sink';
在使用 LogSink 实例前, 必须配置至少一个排出 :
LogSink.registerDrain(new ConsoleLogDrain(), {
enabled: true,
minLevel: LOGGING_CONSOLE_MINLEVEL,
maxLevel: LOGGING_CONSOLE_MAXLEVEL,
});
单子实例可以导入到任何文件中并用于日志:
import LogSink from '@chax-at/log-sink';
LogSink.info('This is an info message');
日志级别
LogSink 只区分了四个日志级别 . 这比其他伐木解决方案要少,但是为了更清楚地说明何时使用每个关卡. 每个关卡的数值都符合syslog标准.
| 职等 | 数字 | 说明 |
|---|---|---|
| 错误 | 3个 | 发生了错误 。 将引发警报。 (取决于排水量) |
| 警告 | 页:1 | 一个警告信息。 将不会触发警报,但可以在仪表板上看到. |
| 资讯 | 6个 | 信息信息,可见于生产日志. |
| 调试 | 第7条 | 调试消息,一般在生产环境中被过滤出. |
在例外也用于非服务器出错的项目中,例如象征性过期的例外, 每种例外情况都应与适当的错误级别相挂钩。 也就是说,
token expired将会是调试消息validation failed这将是一个警告信息PDF generation failed将是一个错误消息
LogSink.error('This is an error message');
LogSink.warning('This is a warning message');
LogSink.info('This is an info message');
LogSink.debug('This is a debug message'); // Level 7
标记、属性和时间戳
除了一个消息外,这些方法中的每一个都采用可选标记,属性对象和时间戳:
enum LogTags {
Database = 'database',
}
LogSink.info('This is an info message', LogTags.Database, {attr1: 'value1', attr2: 'value2'}, new Date());
如果在编译时未知日志级别,则 log 可使用下列方法:
LogSink.log(LogLevel.Info, 'This is an info message');
如果需要,您可以创建额外的 LogSink 实例 :
import {LogSink} from '@chax-at/log-sink';
const logSink = new LogSink();
排水沟
该套装提供了两个内置排水道: ConsoleLogDrain 财务报告和审定财务报表 GelfLogDrain。 。 。 .
通过执行《公约》可增加新的排水量 ILogDrain 接口.
排水管使用 registerDrain 方法.
使用 minLevel 财务报告和审定财务报表 maxLevel,在每条排水管上,可以过滤出重度水平.
此外,可以使用该图过滤日志 filter 方法并使用 transform 方法.
LogSink.registerDrain(new ConsoleLogDrain(), {
enabled: true,
minLevel: LOGGING_CONSOLE_MINLEVEL,
maxLevel: LOGGING_CONSOLE_MAXLEVEL,
filter: (options: LogOptions) => {
return options.tag === LogTags.Database;
},
transform: (options: LogOptions) => {
return {
...options,
message: options.message.toUpperCase(),
};
},
});
控制台LogDrain
这个 ConsoleLogDrain 日志信件到控制台。 可以被配置为日志属性并使用颜色.
new ConsoleLogDrain({logAttributes: true, useColor: true});
盖尔夫·洛格德莱恩
这个 GelfLogDrain 将信件日志到任何 GELF 功能服务器, 如 Graylog .
用这个 @chax-at/gelf-客户端 在引擎盖下.
new GelfLogDrain(new SecureTCPTransport({
host: GELF_HOST,
port: GELF_PORT,
ca: GELF_SERVER_CA_CERT, // CA certificate string or buffer
cert: GELF_CLIENT_CERT, // Client certificate string or buffer
key: GELF_CLIENT_KEY, // CLient key string or buffer
}));
new GelfLogDrain(new TCPTransport({
host: GELF_HOST,
port: GELF_PORT,
}));
new GelfLogDrain(new UDPTransport({
host: GELF_HOST,
port: GELF_PORT,
timeout: GELF_TIMEOUT, // optional timeout (default 1000ms)
protocol: GELF_PROTOCOL, // udp4 (default) or udp6
}));
文件系统LogDrain
这个 FilesystemLogDrain 将信件日志到文件系统中的文件.
new FilesystemLogDrain({
fileName? : string; // optional filename (default log.txt)
formatFunction? : LogFormatFunction; // optional formatting function for the logged message
indentation? : number; // optional indentation for nested newlines (default 4)
logAttributes? : boolean; // whether to log embedded attributes (default true)
outDir: string; // the path of the directory the log file will be created
separateWithEmptyLine? : boolean; // whether to add an additional newline after each log message to improve readability (default false)
});
打开遥测LogDrain
这个 OpenTelemetryLogDrain 通过 OpenTeleometry 日志消息.
首先,在您的工程中安装必要的软件包 :
npm i "@opentelemetry/sdk-node" "@opentelemetry/api" "@opentelemetry/sdk-logs" "@opentelemetry/exporter-logs-otlp-proto"
然后用如下方式使用
import {NodeSDK} from "@opentelemetry/sdk-node";
import {SimpleLogRecordProcessor} from "@opentelemetry/sdk-logs";
import {logs} from '@opentelemetry/api-logs';
import {OTLPLogExporter} from "@opentelemetry/exporter-logs-otlp-proto";
import LogSink, {LogLevel, OpenTelemetryLogDrain} from '@chax-at/log-sink';
const exporter = new OTLPLogExporter({
//url: defaults to 'http://localhost:4318/v1/logs',
});
const sdk = new NodeSDK({
logRecordProcessor: new SimpleLogRecordProcessor(exporter),
});
sdk.start();
const logger = logs.getLoggerProvider().getLogger("default");
LogSink.registerDrain(new OpenTelemetryLogDrain(logger), {
enabled: true,
minLevel: LogLevel.Error,
maxLevel: LogLevel.Debug
});
LogSink.info("This is a log");
更多信息可在 打开远程信息 或正式的开远文件.