Node.js 如何创建用于查看日志的API
API 代表应用程序编程接口。API是一组协议、例程和工具,用于构建软件应用程序。API提供了不同软件应用程序之间进行通信、交换数据和共享功能的方式。
换句话说,API定义了不同的软件组件之间可以如何互动。API指定了软件组件的输入和输出,以及访问它们的方法。API可用于访问Web服务、数据库、操作系统、硬件设备和其他软件组件。
在本文中,我们将讨论在Node.js中创建用于查看日志的API的不同方法。日志对于理解包含数千个API和微服务的Web服务的行为非常有帮助。
方法1:使用Winston日志框架:
创建用于在Node.js中查看日志的API的步骤:
步骤1:安装所需的依赖项: 您需要安装一些软件包,如express、morgan、cors和winston,以创建API。您可以在终端中运行以下命令使用npm安装它们:
npm install express winston
步骤2: 创建一个Express应用程序:创建一个新文件app.js并导入所需的模块:
const express = require('express');
const winston = require('winston');
const app = express();
步骤3: 您可以使用Winston记录更详细的信息。
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
defaultMeta: { service: 'your-service-name' },
transports: [
new winston.transports.File({ filename:
'error.log', level: 'error' }),
new winston.transports.File({
filename: 'combined.log'
})
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
步骤4: 定义API终点:您可以定义一个路由来检索日志并将其作为JSON响应返回。
app.get('/logs', (req, res) => {
logger.query({ order: 'desc', limit: 100 },
(err, result) => {
if (err) {
res.status(500).send({
error: 'Error retrieving logs'
});
} else {
res.send(result);
}
});
});
第5步: 启动服务器:最后,通过监听一个端口,启动Express应用程序:
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
当访问/logs端点时,此API将检索最新的100条日志并以JSON响应形式返回。根据您的需求,您可以自定义日志记录器以记录更详细的信息或将日志写入不同的文件或数据库中。
示例: 在此示例中,我们使用winston.createLogger()创建了一个Winston日志记录器实例。日志记录器有两种类型的传输方式 – 一种用于记录到控制台,一种用于记录到名为app.log的文件中。
我们将日志记录器的日志级别设置为’info’,并使用JSON格式格式化日志条目。我们创建了一个路由路径“/logs”,使用logger.query()查询最新的100个日志条目。我们传入一个带有查询选项的对象 – 顺序设置为“desc”以检索最新的条目,限制设置为100以检索最新的100个条目。
Index.js
const express = require('express');
const winston = require('winston');
const app = express();
// Create a Winston logger with transports
// for logging to console and file
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console(),
new winston.transports.File({
filename: 'app.log'
})
]
});
// Define an API route for viewing the logs
app.get('/logs', (req, res) => {
// Query the logger for the latest log entries
logger.query({ order: 'desc', limit: 100 },
(err, results) => {
if (err) {
// If an error occurs, send an
// error response
res.status(500).send({
error: 'Error retrieving logs'
});
} else {
// If successful, send the log
// entries as a response
res.send(results);
}
});
});
// Start the server and log a message when
// it's ready
app.listen(3000, () => {
logger.info('Server started on port 3000');
});
使用以下命令运行index.js文件:
node index.js
输出结果:

在浏览器上路由“/logs”路径:

输出的格式为JSON格式。输出也被保存在名为app.log的文件中:

方法2:使用Log4js日志框架:
示例: 在这段代码中,我们首先导入必要的包:Express和Log4js。然后,我们配置Log4js将日志写入名为logs.log的文件中,使用文件附加器。我们创建一个可以用来写日志的日志记录器对象。然后,我们为我们的API创建一个端点来查看日志,它从文件中读取日志并将其作为JSON响应返回。
Index.js
const express = require("express");
const app = express();
const log4js = require("log4js");
const fs = require("fs");
// Configure log4js to write logs to a file
log4js.configure({
appenders: {
file: {
type: "file",
filename: "logs.log"
}
},
categories: {
default: {
appenders:
["file"], level: "info"
}
},
});
// Create a logger object
const logger = log4js.getLogger();
// Create a route to view logs
app.get("/logs", (req, res) => {
// Read logs from file
const logs = fs.readFileSync("logs.log", "utf8");
// Return logs as a JSON response
res.json({ logs: logs });
});
// Example logging statements
logger.info("Info message");
logger.warn("Warning message");
logger.error("Error message");
// Start the server
app.listen(3000, () => {
console.log("Server started on port 3000");
});
使用以下命令运行index.js文件:
node index.js
输出结果:

输出结果也保存在logs.log文件中:

极客教程