关于node.js:imook-nodejs个人学习笔记日志

总结:应用fs的api读写文件,把日志存在文本中,设置crontab定时拆分日志。

7.1 日志

  • 拜访日志access log 零碎中 (零碎中最重要的日志)
  • 自定义日志 自定义事件 自定义谬误等

nodejs的文件操作 nodejs stream

  • 日志的开发和应用
  • 日志的拆分、日志内容分析

写文件是一个异步的,不须要立刻去写。用redis太节约。mysql 是表构造,不适宜,也不必部署,也节约。文件的老本比拟低。

7.2 nodejs 文件操作

const fs = require('fs');
const path = require('path');

const fileName = path.resolve(__dirname, 'data.log');

// 读取文件内容
fs.readFile(fileName, (err, data) => {
    if (err) {
        console.log(err);
        return
    }
    // data 是二进制,须要转换成字符串
    console.log(data.toString());
})

// 写入文件
const content = "市民胡女士还是小仙女";
const opt = {
    flag: 'a'
}
fs.writeFile(fileName, content, opt, (err) => {
    if (err) {
        console.log(err);
        return;
    }
})

// 判断文件是不是存在
fs.exists(fileName, (exists) => {
    console.log("exists:", exists);
})

7.3 stream 介绍

性能瓶颈:IO网络IO文件IO
相比于CPU计算和内存读写,IO的次要特点就是
如何在无限的硬件资源下,进步IO的操作效率。


流的概念:
边看边加载。节俭很多的硬件资源。

7.45 读写日志

const fs = require('fs')
const path = require('path')
const readline = require('readline')
// 文件名
const fileName = path.join(__dirname, '../', '../', 'logs', 'access.log');

// readStream 重要
const readStream = fs.createReadStream(fileName)

// 创立readline对象 重要
const rl = readline.createInterface({
    input: readStream
})

let chromeNum = 0
let sum = 0

// 逐行读取
rl.on('line', (lineData) => {
    if (!lineData) {
        return
    }
    // 记录总行数
    sum++

    const arr = lineData.split(' -- ')
    if (arr[2] && arr[2].indexOf('Chrome') > 0) {
        // 累加 chrome 的数量
        chromeNum++
    }
})

// 监听读取实现
rl.on('close', () => {
    console.log('chrome 占比:' + chromeNum / sum)
})

// 写日志
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, {
        flags: 'a'
    })
    return writeStream
}

// 写访问日志
const accessWriteStream = createWriteStream('access.log')
function access(log) {
    writeLog(accessWriteStream, log)
}

module.exports = {
    access
}

7.7 日志拆分,日志剖析



为了效率比拟高,用shell脚本拆分日志。crontab,定时执行工作。

#!/bin/sh
cd /Users/huziyin/Documents/Self-study/imook-nodejs/blog-1/logs
cp access.log $(date +%Y-%m-%d).access.log
echo "">access.log

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据