node.js - 如何使用旋转文件流指定旋转文件位置
问题描述
我编写了如下代码来记录快速日志。
const rfs = require("rotating-file-stream");
function formatDate() {
var d = new Date(),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
hour = d.getHours();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
if (hour.length < 2)
hour = '0' + hour
return [year, month, day, hour].join('-');
}
let log_directory = '/../logs/';
let log_date = formatDate()
let log_file_name = path.normalize(__dirname + log_directory + log_date, 'access.log');
let accessLogStream = rfs.createStream(log_file_name, {
size: "300M",
interval: "1d",
})
app.use(morgan(':date[iso] :method :url :body :headers :remote-addr :req[content-length] - :status :response-time ms - :res[content-length] ', { stream: accessLogStream }));
日志按预期存储在项目之外。
但是在轮换之后,日志以以下文件夹名称存储在项目中
20200507-0943-01-
20200508-0943-01-
20200509-0943-01-
20200510-0943-01-
20200511-0943-01-
20200512-0943-01-
20200513-0944-01-
package.json
package-lock.json
public
routes
scripts
services
app.js
我不希望在项目中创建这些文件夹。有没有办法处理这个?
解决方案
首先,您使用静态文件名作为函数filename
的参数,createStream
并且您正在对日期进行一些计算以获得结果文件名。
请注意,在调用createStream
函数之前,日期的计算只发生一次。为了计算每次旋转时发生的日期,您应该使用文件名生成器函数。详细信息可以在自述文件中找到。
不仅如此,这一行似乎还有一个错误:path.normalize
只接受一个参数。
let log_file_name = path.normalize(__dirname + log_directory + log_date, 'access.log');
最后,要指定日志记录的目录,路径选项就足够了。
如果我正确地论证了您的意图,那么以下代码应该可以解决所有问题
const rfs = require("rotating-file-stream");
function formatDate(d) {
var month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear(),
hour = d.getHours();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
if (hour.length < 2)
hour = '0' + hour;
return [year, month, day, hour].join('-');
}
function log_file_name(time, index) {
if (!time) return 'access.log';
return [formatDate(time), index, 'access.log'].join('-');
}
let accessLogStream = rfs.createStream(log_file_name, {
size: "300M",
interval: "1d",
path: '/../logs/'
});
推荐阅读
- javascript - 如何在for循环中循环嵌套对象
- tensorflow - 从 Tensorflow 中的一个 TFRecord 示例中读取多个特征向量
- stored-procedures - Sap HANA Graphscript - 多行结果的性能下降
- ruby-on-rails - Ruby on Rails 设计 Recaptcha 注册/会话失败
- android - 在 Android 中单击时更新包含在自定义通知中的按钮的文本
- c# - 无需单击即可打开 TreeView
- string - Pandas 数据框列在字符串(即“float”)内浮动到 int
- raku - Cro WebSocket 客户端看不到服务器何时关闭
- web-services - HAProxy 多个前端/侦听器
- vba - 字符数 VBA 用户窗体