如何搭建node服务实现日志处理
发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,小编给大家分享一下如何搭建node服务实现日志处理,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、技术选型选择了 3种主流的技术进行对比:1.1 log4jslog4js是一种no
千家信息网最后更新 2024年11月27日如何搭建node服务实现日志处理
选择了 3种主流的技术进行对比:
1.1 log4js log4js是一种node日志管理工具,可以将自定义格式的日志输出到各种渠道。对于控制台的日志输出可以呈现彩色日志,对于文件方式的日志输出,可以根据文件大小或者日期进行日志切割。 熟悉java的开发人员会发现log4js与一种常用的java日志工具log4j很像。没错,log4js是log4j的JavaScript版,使用方式也相似。 1.2 winston winston也是一种非常流行的node日志管理工具,支持多传输。默认输出格式为json,也可以自定义输出格式。如果想要对日志进行切割还需要使用 winston-daily-rotate-file 模块。 1.3 PM2 PM2实际是node进程管理工具,具有性能监控、进程守护、负载均衡、日志管理等功能。使用PM2进行日志管理,只需要项目中增加console方法调用,无需添加额外的代码。要对日志进行切割,需要使用pm2-logrotate。 由于团队内部服务端系统很多是基于java的,这些系统大部分使用log4j生成日志。日志管理相关的日志归集系统和日志查询系统对log4j格式的日志支持的更好,所以自己最终选用了log4j的JavaScript版log4js来生成日志,下面会对log4js的基本使用进行介绍。
2.1 日志级别
log4js的默认日志级别分为9级,按优先级从低到高排列如下: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF 2.2 appender appender 主要是用来定义以怎样的方式输出,输出到哪里。可以将日志写入到文件、发送电子邮件、通过网络发送数据等。可以通过配置对象的appenders属性定义多个appender。 appender的常用类型有: 2.3 category category 是日志的类型,指定一个或者多个appender为某种类型的日志,不同类型的日志可以指定不同的日志级别。可以通过配置对象的categories属性定义多个category。必须指定default类型,用来获取默认的Logger实例,还可以通过类型名来获取指定类型的Logger实例。 综上所诉, appender 定义了日志输出到哪里,category 将appender 进行了分类,不同类型指定不同的日志级别。
3.1 安装
或者 3.2 简单使用 下面示例利用log4js创建日志对象logger,通过调用logger.debug、logger.info、logger.warn、logger.error 等方法将日志输出到控制台和日志文件。 3.3 日志格式 log4js通过layout 设置日志格式,内置的layout有: 示例: 默认的日志格式: 自定义的日志格式: 代码: 3.4 日志切割 如果日志全部输出到一个文件,日志文件会越来越大,导致日志的备份和查看都很不方便。通过将appender 指定为 dateFile 类型可以实现按日期将日志进行切割。 假如4月1日部署的服务,日志会输出到service.log文件,到4月2日会将service.log更名为server.log.2020-04-01,然后创建新的service.log文件,新的日志将继续输出到service.log文件。 3.5 输出多个文件 下面示例除了将完整日志输出到server.log,还会将error及以上级别的日志输出到server-error.log。 3.6 覆盖console 由于使用log4js需要调用logger.debug、logger.info、logger.warn、logger.error等方法,对于已经调用console 方法输出日志的项目,全部改为调用logger的方法,改动起来很麻烦,可以通过覆盖console的方法来使用log4js输出日志。 为了保证所有日志都能输出到日志文件,获取logger 对象和覆盖console方法要尽早执行。
小编给大家分享一下如何搭建node服务实现日志处理,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
一、技术选型
二、基本概念
当日志级别为ALL时,会输出所有级别的日志 当日志级别为OFF时,则会关闭日志,不会有任何日志输出 用户还可以根据自己的需要自定义日志级别
console:控制台输出 file:文件输出 dateFile:按日期切割的文件输出
三、使用log4js
npm install log4js --save
yarn add log4js
util/log4jsLogger.js
const path = require('path');
const log4js = require('log4js');
// 配置log4js
log4js.configure({
appenders: {
// 控制台输出
console: { type: 'console' },
// 日志文件
file: { type: 'file', filename: path.join(__dirname, '../../logs/server.log')}
},
categories: {
// 默认日志
default: { appenders: [ 'file', 'console' ], level: 'debug' },
}
});
// 获取默认日志
const logger = log4js.getLogger();
module.exports = logger;
server.js
再通过调用logger. info 输出INFO 级别的日志,这里web开发框架使用的Koa。
const Koa = require('koa');
const router = require('./router');
const logger = require('./util/log4jsLogger');
const port = 3000;
const app = new Koa()
.use(router.routes())
.use(router.allowedMethods());
app.listen(port, () => {
logger.info(`Server running on port ${port}`);
});
basic:包含时间戳、日志级别、日志类型的基本日志格式 colored:格式与basic的一致,只是不同级别的日志显示不同的颜色 dummy:只输出第一个参数的内容,没有时间戳、日志级别、日志分类等信息 pattern:可以自定义格式的layout
[2020-04-01T11:33:43.317] [INFO] default - Server running on port 3000
2020-04-01 11:33:43.317 [INFO] Server running on port 3000
// 自定义日志格式
const layout = {
type: 'pattern',
pattern: '%d{yyyy-MM-dd hh:mm:ss.SSS} [%p] %m'
};
log4js.configure({
appenders: {
// 控制台输出
console: { type: 'console' },
// 日志文件,通过设置layout 设置日志格式
file: { type: 'file', filename: path.join(__dirname, '../../logs/server.log'), layout}
},
categories: {
// 默认日志
default: { appenders: [ 'file', 'console' ], level: 'debug' },
}
});
// 日志配置
log4js.configure({
appenders: {
// 控制台输出
console: { type: 'console' },
// 日志文件
file: {
type: 'dateFile',
filename: path.join(__dirname, '../../logs/server.log'),
// 日志切割后文件名后缀格式
pattern: '.yyyy-MM-dd'
}
},
categories: {
// 默认日志
default: { appenders: [ 'file', 'console' ], level: 'debug' },
}
});
util/log4jsLogger.js
const path = require('path');
const log4js = require('log4js');
// 配置log4js
log4js.configure({
appenders: {
// 控制台输出
console: { type: 'console' },
// 全部日志文件
allFile: { type: 'file', filename: path.join(__dirname, '../../logs/server.log')},
// 错误日志文件
errorFile: { type: 'file', filename: path.join(__dirname, '../../logs/server-error.log')}
},
categories: {
// 默认日志,输出debug 及以上级别的日志
default: { appenders: [ 'allFile', 'console' ], level: 'debug' },
// 错误日志,输出error 及以上级别的日志
error: { appenders: [ 'errorFile' ], level: 'error' },
}
});
// 获取默认日志
const defaultLogger = log4js.getLogger();
// 获取错误级别日志
const errorLogger = log4js.getLogger('error');
// 日志代理,同时调用默认日志和错误日志
const loggerProxy = {};
const levels = log4js.levels.levels;
levels.forEach(level => {
const curLevel = level.levelStr.toLowerCase();
loggerProxy[curLevel] = (...params) => {
defaultLogger[curLevel](...params);
errorLogger[curLevel](...params);
}
});
module.exports = loggerProxy;
/**
* 创建日志代理方法
* @param logLevel 日志级别
* @param logger 日志对象
* @return {function}
*/
function createLogProxy (logLevel, logger) {
return (...param) => {
logger[logLevel](...param);
};
}
console.log = createLogProxy('debug', logger);
console.info = createLogProxy('info', logger);
console.warn = createLogProxy('warn', logger);
console.error = createLogProxy('error', logger);
看完了这篇文章,相信你对"如何搭建node服务实现日志处理"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
日志
输出
文件
格式
级别
类型
方法
控制台
控制
不同
管理
对象
配置
服务
可以通过
多个
工具
系统
错误
上级
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器本地磁盘买了咋办
怎么样评价数据库的好坏
数据库表中照片的类型
黑魂服务器啥时候开
朝阳鑫铭科网络技术
浙江牛商网络技术有限公司
网络安全是什么专科
阿里数据库怎么设置锁
学ui的基础软件开发
浙大网新 网络安全
测试在什么情况下会用到数据库
网络安全领域大佬
企业服务器安全性
太原科技大学数据库原理期末
数据库开发工程师要求
华为elk数据库版本号
学生会网络技术部教程
上海互联网科技公司政府支持条件
计算机网络技术思政
服务器防护ddoc
如何让别人访问我的电脑服务器
大一网络技术论文
沈阳网络安全培训学校
江苏计算机软件开发周期
宜宾网络安全张鹏飞
智能手机软件开发方法
网络安全和信息安全审计整改
dedeampz数据库
html服务器软件
周村采购管理软件开发