上一篇

对项目后端进行写日志

  • 案例一:文件操作(原生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、项目下载链接点这里

欢迎访问我的个人博客

第六天:对项目后端日志存储相关推荐

  1. 实战 | 后端日志的前世今生

    小小这里对后端日志技术体系进行分析,这里将会阐述后端日志的前世今生.从小到大 程序控制台日志 这里使用System.out.println 进行打印,输出相关的控制台的信息.编写代码如下 System ...

  2. 【Datawhale跨模态实践学习笔记】项目后端学习

    项目后端简介 项目后端共由四个文件组成,其中VideoLoader负责对上传的视频进行关键帧提取,CustomClipText负责将上传的图片转换为向量数据,CustomClipImage负责将提取的 ...

  3. 分布式日志存储架构设计方案

    在一个完整的项目中,不仅仅是要完成正常的业务开发.同时为了提高一些开发效率.系统异常的追踪.系统功能的扩展等等因素,往往会用到系统在开发.运行过程中所产生的日志.这就需要我们有一个完善的日志系统来存储 ...

  4. pb利用datawindow查询符合条件的数据并且过滤掉其他数据_eBay将CAL上PB级的日志存储迁移到Ceph的实践...

    供稿 | Unified Monitoring Platform 翻译&编辑 | 顾欣怡 本文3663字,预计阅读时间11分钟 本文转载自"eBay技术荟",更多干货请关注 ...

  5. 卓医通项目后端架构介绍

    卓医通项目后端架构介绍 项目简介 卓医通是以完整的基层医疗机构-信息化解决方案为出发点,打造链接诊所.医生.患者.一站式互联网医疗服务系统,深度挖掘基层医疗机构需求,解决其真正痛点:全面提升医疗管理质 ...

  6. ClickHouse 在日志存储与分析方面作为 ElasticSearch 和 MySQL 的替代方案

    2018年,我写过一篇关于Clickhouse的文章,这段内容在互联网上仍然很流行,甚至被多次翻译.现在已经过去两年多,同时 Clickhouse 的开发节奏仍然活跃: 上个月有 800 个合并的 P ...

  7. Python logging模块日志存储位置踩坑

    问题描述 项目过程中写了一个小模块,设计到了日志存储的问题,结果发现了个小问题. 代码结构如下: db.py run.py 其中db.py是操作数据库抽象出来的一个类,run.py是业务逻辑代码.两个 ...

  8. SpringBoot使用Slf4j+Log4j2完成项目的日志记录

    SpringBoot使用Slf4j+Log4j完成项目的日志记录 前言 本示例采用SpringBoot项目使用SpringAOP记录日志,Slf4j作为日志门面,Log4j2作为日志实现实,实现开发中 ...

  9. 大数据平台日志存储分析系统解决方案

    大数据平台日志存储分析系统是在大数据平台下,针对业务系统产生的日志记录进行存储和分析.日志数据来自ElasticSearch存储的日志历史数据,并将需要存储和分析的日志数据从ElasticSearch ...

  10. 【游戏开发进阶】新发带你玩转Unity日志打印技巧(彩色日志 | 日志存储与上传 | 日志开关 | 日志双击溯源)

    文章目录 一.前言 二.常规日志打印 1.打印Hello World 2.打印任意类型的数据 3.context参数干嘛的 4.格式化输出 三.彩色日志打印 四.日志存储与上传 1.打印日志事件 2. ...

最新文章

  1. 将网页保存为webarchive文件的代码
  2. hfss史密斯图_HFSS仿真工程实例 (微波器件).ppt
  3. linux——线程(1)
  4. (c语言)判断一个正整数是否是回文数
  5. 线性方程组迭代解法——雅可比(Jacobi)迭代法,Gauss-Seidel迭代法和超松弛(SOR)迭代法
  6. fork函数_Linux中子进程回收函数:wait和waitpid
  7. 自动识别语音生成字幕
  8. python sorted怎么排序_Python sorted排序方法怎么用
  9. 还想打马赛克掩盖身份?人工智能让你告别打码时代
  10. Vitis指南 | Xilinx Vitis 系列(一)
  11. SEO新手快速入门教程
  12. 总结一下m3u8格式相关问题
  13. 2016,轻轻地你走了,正如你轻轻地来,2017新年快乐
  14. mmdetection特征可视化V2
  15. css 实现马赛克背景,ps透明背景,未选颜色的展示方式
  16. 【JavaScript】ES6 数组的扩展
  17. HTTP协议-How2j教程
  18. 从辍学到名企资深开发工程师,一名 Android 开发者逆袭血泪史
  19. 21、spring循环依赖 问题
  20. 地壳中元素含量排名记忆口诀_地壳中含量最多的八种元素,重温高中化学知识...

热门文章

  1. 4083. 最大公约数
  2. 面向对象2:类和对象
  3. hustoj Runtime Error (运行错误)的解决方法
  4. python转义字符_python转义字符
  5. 线程间通信方式 java_深入理解JAVA多线程之线程间的通信方式
  6. 如何修改influxdb表结构_influxdb的基本使用
  7. tp3.2 模型page和limit方法区别
  8. Linux shell 数组
  9. 八皇后--python代码
  10. [Google Guava]学习--新集合类型BiMap