第六天:对项目后端日志存储
上一篇
对项目后端进行写日志
- 案例一:文件操作(原生nodejs)
(1)项目目录:
(2)读取文件
const fs = require('fs')
const path = require('path')//读取文件内容
fs.readFile(fileName, (err,data) => {if (err) {console.error(err)return}//data是二进制1类型,需要转化为字符串console.log(data.toString())
})
(3)写入文件
//写入文件
const content = '这是新写入的内容\n'
const opt = {flag:'a' //追加写入 覆盖用 ‘w’
}
fs.writeFile(fileName, content, opt, (err) => {if (err) {console.error(err)}
})//判断文件是否存在
fs.exists(fileName, (exist) => {console.log(exist)
})
案例一弊端:对文件的读取和写入都是先一次性操作的。不适合到日志
比如:读取文件是一次性全部读出后,在先控制台输出,一旦文件内容过大时,会占用系统的内存。
解决方法:通过数据流的形式(边读取边输出)
- 案例二:通过数据流的形式来对文件进行读写操作 (管道)
(1)项目目录
(2)案例2.1:从控制台输入内容后立即返回到控制台
process.stdin.pipe(process.stdout)
(3)案例2.2:浏览器发送请求到后端,后端立即返回请求的内容
const http = require('http')
const server = http.createServer((req, res) => {if (req.method === 'POST') {req.pipe(res) // 最主要}
})
server.listen(8000)
(4)案例2.3:将文件内容返回到客户端
const http = require('http')
const fs = require('fs')
const path = require('path')
const fileName1 = path.resolve(__dirname, 'data.txt')
const server = http.createServer((req, res) => {if (req.method === 'GET') {const readStream = fs.createReadStream(fileName1)readStream.pipe(res)}
})
server.listen(8000)
(5)案例2.4:对文件进行复制(data.txt复制到data-back.txt)
// 复制文件
const fs = require('fs')
const path = require('path')const fileName1 = path.resolve(__dirname, 'data.txt')
const fileName2 = path.resolve(__dirname, 'data-bak.txt')//创建水桶
const readStream = fs.createReadStream(fileName1)//读出
const writeStream = fs.createWriteStream(fileName2)//写入//水桶连接管道
readStream.pipe(writeStream)//每次读取的内容
readStream.on('data', chunk => {console.log(chunk.toString())
})//监听结束
readStream.on('end', () => {console.log('copy done')
})
综上:对于写日志应该选择数据流的形式
回到项目中:
- 项目目录(logs目录是存放日志,log.js是将请求存放到日志中)
- log.js
const fs = require('fs')
const path = require('path')// 写日志
function writeLog(writeStream, log) {writeStream.write(log + '\n') // 关键代码
}// 生成 write Stream (第二个水桶)
function createWriteStream(fileName){const fullFileName = path.join(__dirname, '../', '../', 'logs', fileName)const writeStream = fs.createWriteStream(fullFileName, {flag:'a'})return writeStream
}// 写访问日志
const accessWriteStream = createWriteStream('access.log')
function access(log) {writeLog(accessWriteStream, log)
}module.exports = {access
}
- app.js
- 测试
1、express重构博客项目
2、koa2重构博客项目
3、项目下载链接点这里
欢迎访问我的个人博客
第六天:对项目后端日志存储相关推荐
- 实战 | 后端日志的前世今生
小小这里对后端日志技术体系进行分析,这里将会阐述后端日志的前世今生.从小到大 程序控制台日志 这里使用System.out.println 进行打印,输出相关的控制台的信息.编写代码如下 System ...
- 【Datawhale跨模态实践学习笔记】项目后端学习
项目后端简介 项目后端共由四个文件组成,其中VideoLoader负责对上传的视频进行关键帧提取,CustomClipText负责将上传的图片转换为向量数据,CustomClipImage负责将提取的 ...
- 分布式日志存储架构设计方案
在一个完整的项目中,不仅仅是要完成正常的业务开发.同时为了提高一些开发效率.系统异常的追踪.系统功能的扩展等等因素,往往会用到系统在开发.运行过程中所产生的日志.这就需要我们有一个完善的日志系统来存储 ...
- pb利用datawindow查询符合条件的数据并且过滤掉其他数据_eBay将CAL上PB级的日志存储迁移到Ceph的实践...
供稿 | Unified Monitoring Platform 翻译&编辑 | 顾欣怡 本文3663字,预计阅读时间11分钟 本文转载自"eBay技术荟",更多干货请关注 ...
- 卓医通项目后端架构介绍
卓医通项目后端架构介绍 项目简介 卓医通是以完整的基层医疗机构-信息化解决方案为出发点,打造链接诊所.医生.患者.一站式互联网医疗服务系统,深度挖掘基层医疗机构需求,解决其真正痛点:全面提升医疗管理质 ...
- ClickHouse 在日志存储与分析方面作为 ElasticSearch 和 MySQL 的替代方案
2018年,我写过一篇关于Clickhouse的文章,这段内容在互联网上仍然很流行,甚至被多次翻译.现在已经过去两年多,同时 Clickhouse 的开发节奏仍然活跃: 上个月有 800 个合并的 P ...
- Python logging模块日志存储位置踩坑
问题描述 项目过程中写了一个小模块,设计到了日志存储的问题,结果发现了个小问题. 代码结构如下: db.py run.py 其中db.py是操作数据库抽象出来的一个类,run.py是业务逻辑代码.两个 ...
- SpringBoot使用Slf4j+Log4j2完成项目的日志记录
SpringBoot使用Slf4j+Log4j完成项目的日志记录 前言 本示例采用SpringBoot项目使用SpringAOP记录日志,Slf4j作为日志门面,Log4j2作为日志实现实,实现开发中 ...
- 大数据平台日志存储分析系统解决方案
大数据平台日志存储分析系统是在大数据平台下,针对业务系统产生的日志记录进行存储和分析.日志数据来自ElasticSearch存储的日志历史数据,并将需要存储和分析的日志数据从ElasticSearch ...
- 【游戏开发进阶】新发带你玩转Unity日志打印技巧(彩色日志 | 日志存储与上传 | 日志开关 | 日志双击溯源)
文章目录 一.前言 二.常规日志打印 1.打印Hello World 2.打印任意类型的数据 3.context参数干嘛的 4.格式化输出 三.彩色日志打印 四.日志存储与上传 1.打印日志事件 2. ...
最新文章
- 将网页保存为webarchive文件的代码
- hfss史密斯图_HFSS仿真工程实例 (微波器件).ppt
- linux——线程(1)
- (c语言)判断一个正整数是否是回文数
- 线性方程组迭代解法——雅可比(Jacobi)迭代法,Gauss-Seidel迭代法和超松弛(SOR)迭代法
- fork函数_Linux中子进程回收函数:wait和waitpid
- 自动识别语音生成字幕
- python sorted怎么排序_Python sorted排序方法怎么用
- 还想打马赛克掩盖身份?人工智能让你告别打码时代
- Vitis指南 | Xilinx Vitis 系列(一)
- SEO新手快速入门教程
- 总结一下m3u8格式相关问题
- 2016,轻轻地你走了,正如你轻轻地来,2017新年快乐
- mmdetection特征可视化V2
- css 实现马赛克背景,ps透明背景,未选颜色的展示方式
- 【JavaScript】ES6 数组的扩展
- HTTP协议-How2j教程
- 从辍学到名企资深开发工程师,一名 Android 开发者逆袭血泪史
- 21、spring循环依赖 问题
- 地壳中元素含量排名记忆口诀_地壳中含量最多的八种元素,重温高中化学知识...