file-timestamp-stream
Version:
Writing stream with file rotating based on timestamp
122 lines (82 loc) • 3.31 kB
Markdown
# file-timestamp-stream
<!-- markdownlint-disable MD013 -->
[](https://github.com/dex4er/js-file-timestamp-stream)
[](https://github.com/dex4er/js-file-timestamp-stream/actions/workflows/ci.yaml)
[](https://github.com/dex4er/js-file-timestamp-stream/actions/workflows/trunk.yaml)
[](https://coveralls.io/github/dex4er/js-file-timestamp-stream)
[](https://www.npmjs.com/package/file-timestamp-stream)
<!-- markdownlint-enable MD013 -->
This module creates
[stream.Writable](https://nodejs.org/api/stream.html#stream_class_stream_writable)
to a file which is automatically rotated based on current time and uses
[strftime](https://www.npmjs.com/package/strftime) template for file names.
## Requirements
This module requires ES2021 with Node >= 16.
## Installation
```shell
npm install file-timestamp-stream
```
_Additionally for Typescript:_
```shell
npm install -D @types/node
```
## Usage
_Example:_
```js
import FileTimestampStream from "file-timestamp-stream"
// or
import {FileTimestampStream} from "file-timestamp-stream"
```
### Options
- `flags` is a string with
[flags](https://nodejs.org/api/fs.html#fs_fs_open_path_flags_mode_callback)
for the opened stream (default: `'a'`)
- `fs` is a custom [fs](https://nodejs.org/api/fs.html) module (optional)
- `path` is a template for new filenames (default: `'out.log'`)
_Example:_
Basic path based on `strftime` parameters:
```js
const stream = new FileTimestampStream({
path: "%Y-%m-%dT%H.log",
flags: "a",
})
```
### newFilename
This method can be overridden in the subclass.
The method generates a filename for new files. By default, it returns a new
filename based on path and current time.
_Example:_
```ts
import strftime from "ultra-strftime"
class MyFileTimestampStream extends FileTimestampStream {
/** count how many files has been created */
counter = 0
// for pure Javascript explicit constructor is necessary
// constructor (options) { super(options); this.counter = 0 }
protected newFilename(): string {
const filename = strftime(this.path)
if (filename !== this.currentFilename) this.counter++
return filename
}
}
const stream = new MyFileTimestampStream({
path: "%Y-%m-%dT%H:%M.log",
})
```
### Properties
Readonly public properties based on contructor's options:
- `flags`
- `fs`
- `path`
Protected properties for a custom subclass:
- `currentFilename` contains the last opened filename
- `stream` contains current
[fs.WriteStream](https://nodejs.org/api/fs.html#fs_class_fs_writestream)
object
### Path template format
A path can contain [strftime](https://www.npmjs.com/package/strftime) specifiers.
### Warning
This stream has to be closed to free streams and timers.
## License
Copyright (c) 2017-2024 Piotr Roszatycki <piotr.roszatycki@gmail.com>
[MIT](https://opensource.org/licenses/MIT)