例外处理在确保node.js应用程序的稳定性和可靠性方面起着至关重要的作用。通过有效处理异常,开发人员可以识别和解决错误,改善调试并提供更平滑的用户体验。在此博客文章中,我们将使用流行的日志记录库,具有自定义配置的Log4J在Node.js应用程序中处理异常。
记录消息时,重要的是要轻松识别日志级别,例如是错误,警告还是信息。
要使用log4js软件包,请按照以下基本步骤:
1.通过运行以下命令安装包:
npm install log4js
您可以在npmjs.com网站上找到有关log4js软件包的更多信息。
2.创建一个称为logger.ts的新文件,并添加以下代码:
// Description: This file contains the logger configuration and custom logger functions
import { getLogger, configure } from 'log4js';
//configure logger
//type of appenders: console, file, dateFile, logLevelFilter, multiFile, stdout, stderr, cluster, log4js
//level of appenders: all, trace, debug, info, warn, error, fatal, mark, off
configure(
{
appenders: {
console: { type: "console" }
},
categories: {
default: {
appenders: ["console"],
level: 'all'
}
}
}
);
//get logger
const logger = getLogger();
//custom error logger
const errorLogger = (error: Error, functionName:string)=>{
let responseErrorMessage = error.message;
logger.error(`Function Name: ${functionName} \n Message: ${responseErrorMessage} \n Stack: ${error.stack}`)
}
//custom info logger
const infoLogger = (infoMessage: string, functionName:string)=>{
logger.info(`Function Name: ${functionName} Message: ${infoMessage}`);
}
//custom warning logger
const warnLogger = (warnMessage: string, functionName:string)=>{
logger.warn(`Function Name: ${functionName} Warning: ${warnMessage}`);
}
export default {errorLogger,infoLogger,warnLogger}
此代码设置了记录器配置,并定义了三个自定义记录器功能:ErrorLogger,Infologger和Warnlogger。这是代码的细分:
•代码导入getLogger并从“ log4js'库”配置函数。
•调用配置函数来设置Logger配置。在此配置中,定义了单个类型的“控制台”类型
•logger配置指定所有日志事件都应附加到控制台Appender。
• getLogger 函数被称为检索logger实例
• errorLogger 函数采用错误对象和a functionName 字符串作为参数。它记录了一个错误消息,包括函数名称,错误消息和堆栈跟踪。
• Infologger 函数采用 infomessage 字符串和 functionName string作为参数。它记录了一条信息消息,包括功能名称和信息消息。
• warnlogger 函数采用 warnmessage 字符串和函数名称字符串作为参数。它记录了警告消息,包括功能名称和警告消息
•最后,代码导出一个包含三个自定义记录器函数的对象:ERRORLOGGER,INFOLOLGER和WARNLOGGER。
总的来说,此代码使用log4js库设置了记录配置,并提供了用于记录错误,信息消息和警告的自定义记录器功能,并带有其他上下文信息,例如功能名称。
3.将记录器在功能中使用。这是使用logger.ts的示例:
它使用自定义Logger对象在执行的不同阶段记录了各种消息。
import { Request, Response } from "express";
import models from "../models"
import logger from "../log/logger";
const getContact = async (req: Request, res: Response) => {
logger.infoLogger("Start", "getContact");
let contactDetails: {count:number,
rows:{
Id:string,
LastName:string,
MiddleName:string,
FirstName:string,
ContactNumber:string,
Email:string}[]};
try {
const contactnumber=req.params.contactnumber
contactDetails = await models.Contact.findAndCountAll({
offset: 0,
//limit: max,
attributes: [
"Id",
"LastName",
"MiddleName",
"FirstName",
"ContactNumber",
"Email"
],
where: { IsActive: 1,ContactNumber:contactnumber }
});
if (contactDetails.count == 0) {
logger.infoLogger("No data found", "getContact");
logger.warnLogger( `No data found for contact number: ${contactnumber}`, "getContact");
return res.status(204).json({ message: 'No data found' });
}
else
return res.status(200).json({ data: contactDetails });
}catch (error: any) {
logger.errorLogger(error, "getContact");
if (error.statusCode) {
return res.status(error.statusCode).json({ message: error.message });
} else {
return res.status(500).json({message: `An unexpected error occurred. ${error.message}` });
}
}
}
4.Below是各种情况下的预期输出:
¢当找不到数据时:
记录级别:信息
颜色:绿色
输出:
¢发生意外错误时(捕获块):
记录级别:错误
颜色:红色
输出:
¢记录警告消息时:
记录级别:警告
颜色:黄色
输出:
要查看有关Azure的日志,您可以参考文章Exception Handling, Logging, and Notifications in Azure App Services: A Comprehensive Guide以获取详细说明。
通过遵循最佳实践并利用log4js的功能,开发人员可以增强其node.js应用程序的整体质量和可维护性。此外,Azure App Services中有关异常处理,记录和通知的综合指南为在Azure环境中管理日志提供了宝贵的见解。有了这些实践,开发人员可以构建符合稳定标准和可靠性标准的强大而有弹性的节点。