node.js 日志文件的目录创建 、内容写入:fs.writeFile()和writerStream两种方法

    技术2022-07-11  111

    node.js日志写入

    一、先来看一下 fs1、fs中常用的flag2、比较常见的参数 二、创建目录 fs.mkdir()1、参数:(来自菜鸟教程)2、我们这里用日期来创建目录 三、使用fs.writeFile() 写入日志四、writerStream 流 写入日志五、源码

    一、先来看一下 fs

    1、fs中常用的flag

    这是菜鸟教程的截图:

    2、比较常见的参数

    path:文件的路径; options :参数是一个对象 flag:标识位; mode:权限位; fd:文件描述符,需要先使用 open 打开; buffer:要将内容读取到的 Buffer; offset:整数,向 Buffer 写入的初始位置; length:整数,读取文件的长度; position:整数,读取文件初始位置; callback:回调函数。

    二、创建目录 fs.mkdir()

    1、参数:(来自菜鸟教程)

    path - 文件路径。 options 参数可以是: recursive - 是否以递归的方式创建目录,默认为 false。 mode - 设置目录权限,默认为 0777。 callback - 回调函数,没有参数。

    2、我们这里用日期来创建目录
    const fs=require('fs'); const moment=require('moment');//获取日期的插件 const path=require('path'); //获取日期然后拼接目录 let Dir=path.join(__dirname,`./log/${moment().format('YYYYMMDD')}`); //创建目录 function create_access(){ //自己定义的文件 let directory=Dir+'/access.log' fs.mkdirSync(Dir,{ //是否使用递归创建目录 recursive:true }) }

    效果图 access.log这里放的是基本的访问信息;err.log则是异常信息

    三、使用fs.writeFile() 写入日志

    journal.js

    //写入文件信息---基本的信息access.log //write_log的参数是数据,路径 //正常情况的话;log文件都是多个的为了方便文件名用参数代替 function write_log(data,path){ //先确认文件是否存在 if(path=='access.log'){ create_access(); }else if (path=='err.log'){ create_err(); } let directory=Dir+'/'+path; //flag:'a'是追加的文件内容;追加之后记得换行 fs.writeFile(directory,data, {flags: 'a'}, function (err,data) { if(err){ write_log(err+'\n','err.log'); } console.log('追加成功') }); } //暴露出去 module.exports={ write_log }

    server.js

    const http=require('http'); const fs=require('fs'); const moment=require('moment'); const { write_log } =require('./journal.js') http.createServer(function(req,res){ //头部 res.writeHead(200,{'content-type':'text/html;charset=utf-8'}); //方法,访问地址,浏览器特性,访问时间 let log=req.method+' -- '+req.url+' -- '+req.headers['user-agent']+' -- '+moment().format('YYYY-MM-DD HH:mm:ss')+'\n'; write_log(log,'access.log'); // write_stream(log,'access.log'); res.write('你好'); res.end(); }).listen(8082); console.log('http://127.0.0.1:8082')

    运行结果:

    四、writerStream 流 写入日志

    journal.js

    //用流写入 function write_stream(data,path){ //先确认文件是否存在 if(path=='access.log'){ create_access(); }else if (path=='err.log'){ create_err(); } // 创建一个可以追加的流,写入到文件 var writerStream = fs.createWriteStream(Dir+'/'+path,{ flags: 'a' }); // 使用 utf8 编码写入数据 writerStream.write(data,'UTF8'); // 标记文件末尾 writerStream.end(); // 处理流事件 --> data, end, and error writerStream.on('finish', function() { console.log("追加完成。"); }); //异常处理 writerStream.on('error', function(err){ write_stream(err+'\n','err.log'); console.log(err.stack); }); } //暴露出去 module.exports={ write_stream }

    server.js和上面的一样;只是修改了方法,效果也是一样的

    五、源码

    journal.js

    const fs=require('fs'); const moment=require('moment'); const path=require('path'); let Dir=path.join(__dirname,`./log/${moment().format('YYYYMMDD')}`); //创建目录 function create_access(){ //自己定义的文件 let directory=Dir+'/access.log' fs.mkdirSync(Dir,{ //递归创建目录 recursive:true }) } function create_err(){ //自己定义的文件 let directory=Dir+'/err.log' fs.mkdirSync(Dir,{ //递归创建目录 recursive:true }) } //写入文件信息---基本的信息access.log //write_log的参数是数据,路径 //正常情况的话;log文件都是多个的为了方便文件名用参数代替 function write_log(data,path){ //先确认文件是否存在 if(path=='access.log'){ create_access(); }else if (path=='err.log'){ create_err(); } let directory=Dir+'/'+path; //flag:'a'是追加的文件内容 fs.writeFile(directory,data, {flag: 'a'}, function (err,data) { if(err){ write_log(err+'\n','err.log'); } console.log('追加成功') }); } //用流写入 function write_stream(data,path){ //先确认文件是否存在 if(path=='access.log'){ create_access(); }else if (path=='err.log'){ create_err(); } // 创建一个可以追加的流,追加到文件中 var writerStream = fs.createWriteStream(Dir+'/'+path,{ flags: 'a' }); // 使用 utf8 编码写入数据 writerStream.write(data,'UTF8'); // 标记文件末尾 writerStream.end(); // 处理流事件 --> data, end, and error writerStream.on('finish', function() { console.log("追加完成。"); }); writerStream.on('error', function(err){ write_stream(err+'\n','err.log'); console.log(err.stack); }); } module.exports={ write_log, write_stream, }

    server.js

    const http=require('http'); const moment=require('moment'); const { write_log,write_stream } =require('./journal.js') http.createServer(function(req,res){ //头部 res.writeHead(200,{'content-type':'text/html;charset=utf-8'}); //方法,访问地址,浏览器特性,访问时间 let log=req.method+' -- '+req.url+' -- '+req.headers['user-agent']+' -- '+moment().format('YYYY-MM-DD HH:mm:ss')+'\n'; // 第一种方法 write_log(log,'access.log'); // 第二种方法 write_stream(log,'access.log'); res.write('你好'); res.end(); }).listen(8082); console.log('http://127.0.0.1:8082')

    菜鸟教程链接

    初来乍到,如果有什么问题或者bug可以提出来,不喜勿喷

    Processed: 0.014, SQL: 9