Node.js 如何在本地生成日志文件
<p>平常都使用console来打印 node 脚本执行时需要看到的信息,但这些信息也就只能在<strong>控制台</strong>查看。假如你希望将打印的信息记录到<strong>文件查看</strong>的话,那就往下看看吧。</p><p> </p>
<h2 id="item-1">1、前言</h2>
<p>期望:</p>
<ul>
<li>每次运行脚本时,生成log日志存储到本地</li>
<li>每次执行脚本,之前日志内容清空</li>
</ul>
<p>需要了解的知识点:</p>
<ul>
<li>node.js 中的fs模块</li>
<li>node.js 中的new console.Console</li>
</ul>
<p> </p>
<h2 id="item-2">2、什么是 fs</h2>
<p>使用 node.js 对日志进行存储,就一定会对本地文件的增删改查,那么我们需要用到fs。</p>
<p>如果你写过 node,想必你应该见过它fs,fs全称为文件系统(File System)。文件系统简单来说就是<strong>通过 Node 来操作系统中的文件</strong>。</p>
<p>fs 不需要 npm install,node 中自带,直接引用即可:</p>
<pre><code class="hljs php"><span class="hljs-keyword">const</span> fs = <span class="hljs-keyword">require(<span class="hljs-string">'fs');</span></span></code></pre>
<p>本文将会使用 fs 的fs.createWriteStream(path, options)方法,用于创建可读流,用法如下:</p>
<pre><code class="hljs php"><span class="hljs-comment">/**
* <span class="hljs-doctag">@param1 path
* <span class="hljs-doctag">@param2 options
*/
let fs = <span class="hljs-keyword">require(<span class="hljs-string">'fs');
let ws = fs.createWriteStream(<span class="hljs-string">'./1.txt',{
flags:<span class="hljs-string">'w'<span class="hljs-comment">//文件的打开模式
,mode:<span class="hljs-number">0o666<span class="hljs-comment">//文件的权限设置
,encoding:<span class="hljs-string">'utf8'<span class="hljs-comment">//写入文件的字符的编码
,highWaterMark:<span class="hljs-number">3<span class="hljs-comment">//最高水位线
,start:<span class="hljs-number">0 <span class="hljs-comment">//写入文件的起始索引位置
,autoClose:<span class="hljs-keyword">true<span class="hljs-comment">//是否自动关闭文档
})</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>以此用于在日志记录后于本地生成日志文件。</p>
<p> </p>
<h2 id="item-3">3、new console.Console(stdout[, stderr][, ignoreErrors])</h2>
<p>在 node.js 中 console 模块提供了基础的调试功能。使用很简单,常用的API主要有 console.log()、console.error()。</p>
<p>此外,可以基于Console类,方便的扩展出自己的console实例,比如把调试信息打印到文件里,而部署输出在控制台上。</p>
<pre><code class="hljs javascript"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require(<span class="hljs-string">'fs');
<span class="hljs-keyword">const file = fs.createWriteStream(<span class="hljs-string">'./outPut.txt');
<span class="hljs-keyword">let logger = <span class="hljs-keyword">new <span class="hljs-built_in">console.Console(file, file);
<span class="hljs-comment">// 调用
logger.log(<span class="hljs-string">'hello');
复制代码</span></span></span></span></span></span></span></span></span></code></pre>
<p>此时,调用logger.log内容将会输出到 outPut.txt里,而不是打印到控制台。</p>
<p> </p>
<h2 id="item-4">4、node.js 生成日志文件方法</h2>
<p>在了解完 node 的两个模块fs和console后,我们开始写这个简单而实用的方法,先创建 index.js:</p>
<pre><code class="hljs javascript"><span class="hljs-comment">// index.js
<span class="hljs-keyword">const fs = <span class="hljs-built_in">require(<span class="hljs-string">'fs');
<span class="hljs-keyword">let options = {
<span class="hljs-attr">flags: <span class="hljs-string">'a', <span class="hljs-comment">//
encoding: <span class="hljs-string">'utf8', <span class="hljs-comment">// utf8编码
}
<span class="hljs-keyword">let stderr = fs.createWriteStream(<span class="hljs-string">'./a.log', options);
<span class="hljs-comment">// 创建logger
<span class="hljs-keyword">let logger = <span class="hljs-keyword">new <span class="hljs-built_in">console.Console(stderr);
<span class="hljs-comment">// 真实项目中调用下面即可记录错误日志
logger.log(<span class="hljs-string">'这是一条日志1');
logger.log(<span class="hljs-string">'这是一条日志2');
logger.log(<span class="hljs-string">'这是一条日志3');</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>打开终端执行node logger.js:</p>
<pre><code class="hljs php">$ node index.js</code></pre>
<p>此时根目录将会生成 a.log 文件</p>
<p>好了,最简易版的就这样完成了。但是当时在此执行node logger.js时,日志将会累加上去,这样会增加本地存储的负担。所以我希望的是每次执行的时候清空一下。</p>
<p>那就来改写一下 index.js, node.js 中改写依旧使用fs的方法fs.writeFile:</p>
<pre><code class="hljs javascript"><span class="hljs-comment">// 清空a.log内容
fs.writeFile(<span class="hljs-string">'./a.log', <span class="hljs-string">'', <span class="hljs-function"><span class="hljs-keyword">function (<span class="hljs-params">err) {
<span class="hljs-keyword">if(err){
<span class="hljs-built_in">console.log(err);
}
});
复制代码</span></span></span></span></span></span></span></span></code></pre>
<p>至此,我期望得到的日志文件就完成了,完整代码为:</p>
<pre><code class="hljs javascript"><span class="hljs-comment">// index.js
<span class="hljs-keyword">const fs = <span class="hljs-built_in">require(<span class="hljs-string">'fs');
<span class="hljs-keyword">let options = {
<span class="hljs-attr">flags: <span class="hljs-string">'a', <span class="hljs-comment">//
encoding: <span class="hljs-string">'utf8', <span class="hljs-comment">// utf8编码
}
<span class="hljs-keyword">let stderr = fs.createWriteStream(<span class="hljs-string">'./a.log', options);
<span class="hljs-comment">// 创建logger
<span class="hljs-keyword">let logger = <span class="hljs-keyword">new <span class="hljs-built_in">console.Console(stderr);
fs.writeFile(<span class="hljs-string">'./a.log', <span class="hljs-string">'', <span class="hljs-function"><span class="hljs-keyword">function (<span class="hljs-params">err) {
<span class="hljs-keyword">if(err){
<span class="hljs-built_in">console.log(err);
}
});
<span class="hljs-comment">// 真实项目中调用下面即可记录错误日志
logger.log(<span class="hljs-string">'这是一条日志1');
logger.log(<span class="hljs-string">'这是一条日志2');
logger.log(<span class="hljs-string">'这是一条日志3');</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>大家可以复制到自己的本地去跑跑看,终端执行一下:</p>
<pre><code class="hljs css"><span class="hljs-selector-tag">node <span class="hljs-selector-tag">index<span class="hljs-selector-class">.js</span></span></span></code></pre>
<p><span style="position: relative; left: -100000px">资源搜索网站大全https://55wd.com</span> <span style="position: relative; left: -100000px">广州品牌设计公司http://www.maiqicn.com</span></p>
<h2 id="item-5">5、其他</h2>
<p>当然在此基础上你可以拓展其它内容,比如给日志中增加<strong>时间戳</strong>、<strong>区分日志类型储存</strong>等。</p><br><br>
来源:https://www.cnblogs.com/qianxiaox/p/13765676.html
頁:
[1]