如何在 fastify 中使用自定义记录器?

d-t*_*d-t 7 logging node.js fastify

我的公司有一个定制开发的记录器包,我们想在 fastify 中使用它作为默认记录器。我试图通过下面这个简单的例子来了解如何注册我的记录器,但是 fastify 总是使用 Pino。

索引.js

const log = require("./Logger");
const fastify = require("fastify")({ logger: log });

fastify.get("/", (request, reply) => {
    request.log(
        "includes request information, but is the same logger instance as `log`"
    );
    reply.send({ hello: "world" });
});

fastify.listen(3000)
Run Code Online (Sandbox Code Playgroud)

记录器.js

function Logger(...args) {
    this.args = args;
}
Logger.prototype.info = function(msg) {
    console.log("myLogger", msg);
};
Run Code Online (Sandbox Code Playgroud)

logger.js也包含error, debug, fatal, warn, trace,child函数但函数体是相同的。

结果是:

{"level":30,"time":1553095994942,"msg":"Server listening at http://127.0.0.1:3000","pid":14543,"hostname":"VirtualBox","v":1}
Run Code Online (Sandbox Code Playgroud)

whiitch 是默认的 Pino 输出。

Man*_*lon 10

为解释在这里,你的记录器

必须有以下方法

所以这个例子有效:

function Logger(...args) {
  this.args = args;
}
Logger.prototype.info = function (msg) { console.log("myLogger", msg); };
Logger.prototype.error = function (msg) { console.log("myLogger", msg); };
Logger.prototype.debug = function (msg) { console.log("myLogger", msg); };
Logger.prototype.fatal = function (msg) { console.log("myLogger", msg); };
Logger.prototype.warn = function (msg) { console.log("myLogger", msg); };
Logger.prototype.trace = function (msg) { console.log("myLogger", msg); };
Logger.prototype.child = function () { return new Logger() };


const myLogger = new Logger()
const app = require('fastify')({
  logger: myLogger
})

app.get("/", (request, reply) => {
  request.log.info('hi');
  reply.send({ hello: "world" });
});

app.listen(3000)
Run Code Online (Sandbox Code Playgroud)

在这里您可以检查应用于您的参数的记录器验证