@ bonniernews/ 浏览器
Bonnier News logger 库,这使得统一伐木更容易. 它为GCP预配置,包括Express服务器的追踪能力.
npm install @bonniernews/logger
使用量
以下是启用日志跟踪的示例服务器 .
import {
getTraceparent,
middleware,
logger as buildLogger
} from "@bonniernews/logger";
import express from "express";
const logger = buildLogger();
const app = express();
// This middleware will create a request context and
// automatically decorate all logs with tracing data:
app.use(middleware());
app.get("/", async (req, res) => {
logger.info("Hello, world!");
// Propagate traceparent to other services
const response = await fetch("https://some.other.service.bn.nr/some/endpoint", {
headers: { traceparent: getTraceparent() },
});
...
});
这个 middleware 应该尽早放入,因为只有在这个中间软件之后的日志才能得到追踪数据。 中间软件将从GCP中查找活动项目ID. 或者,你可以设置 GCP_PROJECT 用于此目的的环境变量.
使用 getTraceparent 函数将追踪信头传递给下游服务.
使用 getTraceId 如果您只想知道当前追踪识别.
如果您想要用自定义数据来装饰日志, 请使用导出 decorateLogs 函数。 为了使用这个,需要先安装中间软件.
接口
图书馆有这些命名的输出:
logger: 用于创建日志, 参见 下级。 。 。 .middleware:用于安装请求上下文商店的中件软件,用于以自动跟踪来装饰日志. 此中间软件允许使用decorateLogs, (中文(简体) ),getLoggingData, (中文(简体) ),getTraceparent财务报告和审定财务报表getTraceId。 。 。 .attachTrace: 如果您有单独的脚本或功能, 不使用快递的中件, 您可以在其中使用日志 lib .decorateLogs: 向请求上下文添加数据的函数.getLoggingData: 返回被装饰的数据字段并附带微量信息.getTraceparent: 返回溯源头值 - 用于向下游服务提出的请求.getTraceId: 返回微分值 - 如果想要将其添加到API 错误响应中,则有用.createTraceparent: 生成微量母头值的功能.
锁定器
选项
此库使用 皮诺伐木机,并使用相同的选项创建实例。 在大多数情况下,不需要这样,您可以使用默认:
- 用途
info作为最小日志级别 - JSON 登录
severity财务报告和审定财务报表message非本地环境的字段 - 符合 GCP 结构化伐木 标准 - 有利于当地发展和测试环境的采伐
日志级别
记录器有以下的级别, 以及相应的GCP severity 映射 :
| 日志级别 | GCP 严重性 |
|---|---|
trace | DEBUG |
debug | DEBUG |
info | INFO |
warn | WARNING |
error | ERROR |
fatal | CRITICAL |
日志消息
以下是如何使用日志的几个例子:
import { logger } from "@bonniernews/logger";
const log = logger({ level: "debug" });
log.debug("This is just a message");
log.info("This is how to use %s strings: %d", "template", 123);
log.info({ any: { additional: "data" } }, "I'm attaching relevant data");
const error = new Error("Oops!");
// This will set error.message as the log message,
// and add a serialized error object under the `err` key:
log.warn(error);
// The `err` key is special, and triggers error serialization:
log.error({ err: error }, "This message takes precedence over err.message");
附加跟踪
示例
import { attachTrace } from "@bonniernews/logger";
const getTrace = () => new Promise((resolve) => resolve(getTraceId()));
const runScript = async function (param1, param2) {
const output = [param1, param2];
output.push(getTraceId());
const trace = await getTrace(); // The trace is available since this is invoked from a trace context.
output.push(trace);
return output;
};
const runWithTrace = await attachTrace(runScript);
const res1 = await runWithTrace(1, 2); // Will execute runScript with parameters 1, 2
const res2 = await runWithTrace(3, 4); // Will execute runScript with parameters 3, 4
追踪
如果您想要对日志进行编解, 请使用库中的 middleware,它将使用节点ASync钩子存储和装饰所有日志 标准化 traceparent 头曰.