首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Express中进行标记日志记录

如何在Express中进行标记日志记录
EN

Stack Overflow用户
提问于 2017-06-02 22:05:49
回答 2查看 123关注 0票数 0

请求的日志如下所示:

代码语言:javascript
复制
Received a new product Widget-1
Started to store product
POST /products 200 52.240 ms - 2
Product stored

其中第一行、第二行和第四行是我使用console.log创建的日志。第三件是摩根做的。

我的问题是,将产品存储在db中的(异步)函数相对比较慢,所以我有如下所示的日志

代码语言:javascript
复制
Received a new product Widget-1
Started to store product
POST /products 200 52.240 ms - 2
Received a new product Widget-2
Started to store product
POST /products 200 52.240 ms - 2
Product stored
Product stored

如何标记每一行日志,以便轻松地对请求的日志进行分组?有点像

代码语言:javascript
复制
[11111] Received a new product Widget-1
[11111] Started to store product
[11111] POST /products 200 52.240 ms - 2
[aaaaa] Received a new product Widget-2
[aaaaa] Started to store product
[aaaaa] POST /products 200 52.240 ms - 2
[11111] Product stored
[aaaaa] Product stored

标签可以任何格式,我只想过滤属于同一请求的行。

我在Express中尝试了这种方法,创建了一个中间件,该中间件将一个随机数分配给一个req.id,并在每个console.log中使用该数字,例如:

代码语言:javascript
复制
console.log(`[${req.id}] Started to store product`)

但是我更喜欢在中间件或配置中定义标记,然后使用console.log("Started to store product")

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-08 01:39:38

将唯一的ID附加到req是正确的方向。

进一步推动它,我们可以附加一个log()函数到req,它将记录任何以req.id为前缀的内容。

这给了我们:

代码语言:javascript
复制
const myMiddleware = (req, res, next) => {
  req.id = getUniqueId();
  req.log = (...args) => console.log(`[${req.id}]`, ...args);
};

..。以后再使用:

代码语言:javascript
复制
// later
req.log('Started to store product'); // Outputs `[123456] Started to store product`

关于您希望同时标记Morgan日志这一事实,这将不可能在每次请求的基础上标记它,除非Morgan可以被提供一个自定义日志函数。

票数 2
EN

Stack Overflow用户

发布于 2019-08-14 17:30:35

我专门创建了一个库来启用这个名为涂鸦的程序库

当您使用涂鸦时, 中间件。在您的应用程序中的任何地方,您调用的画笔记录器都会根据父请求自动标记输出。

  • 根据您的要求,我更改了输出的格式字符串。

spanId包含,缩写为 1)当前提交哈希2)父ID 3进程ID 4)请求数量。这意味着您可以根据这个spanId分离请求(通过日志收集器中的一些正则表达式),同时还可以获得一些有用的基本信息。

代码语言:javascript
复制
const scribbles = require('scribbles');
const express   = require('express');

scribbles.config({
   format:'{time} [{spanId}] <{logLevel}> {fileName}:{lineNumber} {message}'
})

const app = express();

// start a trace for each incoming request.
app.use(scribbles.middleware.express);

app.get('/', function (req, res){

  scribbles.log("incoming");
  // 2022-06-27T16:24:06.473 [090e8e40000005] <log> index.js:17 incoming

  // ... do some work

}) // END app.get '/'


app.listen(port, () => scribbles.status(`App is ready!`))

scribbles可以在帮助日志事件方面做更多的操作。了解性能监视和跨微服务的分布式跟踪的查看文档中的一些示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44338077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档