如何搭建node服务实现日志处理
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,小编给大家分享一下如何搭建node服务实现日志处理,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、技术选型选择了 3种主流的技术进行对比:1.1 log4jslog4js是一种no
千家信息网最后更新 2025年01月24日如何搭建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安全错误
数据库的锁怎样保障安全
软件开发公司有些什么岗位
php怎么批量删除数据库
日本网络安全法规条例
我是网络安全小使者作文
美国cdn服务器
软件开发平台免费
怎么切换数据库
团课感想之网络安全
网络安全监察专业的大学排名
济南浪潮服务器怎么收费
我的服务器ip地址1.16.5
慧科新闻数据库 苏大
服务资源管理器连接数据库
国家网络安全知识百问下载
打击网络安全问题
2021网络安全知识答案廊坊
同学们网络安全防疫
火山安卓软件开发个人版
soul聊天服务器连接不成功
西安村游网络技术官网
软件开发需求最多的岗位
ddns管理服务器
存储区域网络安全知识
四级报名忘记密码服务器繁忙
数据库端口转发
网络安全几部分组成
建飞网络安全吗
软件开发很辛苦吗
惠普畅游人 软件开发
腾讯的网络安全实验室