Skip to content

Commit

Permalink
Close #4 Log file limits
Browse files Browse the repository at this point in the history
  • Loading branch information
megahertz committed Jun 24, 2016
1 parent 7262c3d commit af7e372
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 4 deletions.
6 changes: 5 additions & 1 deletion README.md
Expand Up @@ -73,6 +73,10 @@ log.transports.console.format = (msg) => msg.text;
log.transports.file.level = 'warning';
log.transports.file.format = '{h}:{i}:{s}:{ms} {text}';

// Set maximum log size in bytes. When it exceeds, old log will be saved
// as log.old.log file
log.maxSize = 5 * 1024 * 1024;

// Write to this file, must be set before first logging
log.transports.file.file = __dirname + '/log.txt';

Expand All @@ -94,4 +98,4 @@ log.appName = 'test';

## License

Licensed under MIT.
Licensed under MIT.
19 changes: 17 additions & 2 deletions index.js
Expand Up @@ -57,6 +57,8 @@ module.exports.transports.console.level = 'silly';
module.exports.transports.file = transportFile;
module.exports.transports.file.format = formatFile;
module.exports.transports.file.level = 'warning';
module.exports.transports.file.maxSize = 1024 * 1024;
module.exports.transports.file.streamConfig = undefined;

module.exports.findLogPath = findLogPath;

Expand Down Expand Up @@ -119,7 +121,11 @@ function transportFile(msg) {
log('warning', 'electron-log.transports.file: Could not set a log file');
return;
}


if (transportFile.maxSize > 0) {
logRotate(transportFile.file, transportFile.maxSize);
}

transportFile.stream = fs.createWriteStream(
transportFile.file,
transportFile.streamConfig || { flags: 'a' }
Expand All @@ -132,6 +138,15 @@ function transportFile(msg) {

transportFile.stream.write(text + EOL);
}

function logRotate(file, maxSize) {
try {
const stat = fs.statSync(file);
if (stat.size > maxSize) {
fs.renameSync(file, file.replace(/log$/, 'old.log'));
}
} catch (e) {}
}
// endregion transport

// region get log path
Expand Down Expand Up @@ -308,4 +323,4 @@ function pad(number, zeros) {
zeros = zeros || 2;
return (new Array(zeros + 1).join('0') + number).substr(-zeros, zeros);
}
// endregion formatter
// endregion formatter
38 changes: 38 additions & 0 deletions index.spec.js
Expand Up @@ -3,13 +3,16 @@

const expect = require('chai').expect;
const index = require('rewire')('.');
const os = require('os');
const fs = require('fs');

const format = index.__get__('format');
const formatConsole = index.__get__('formatConsole');
const formatFile = index.__get__('formatFile');
const pad = index.__get__('pad');
const compareLevels = index.__get__('compareLevels');
const loadAppPackage = index.__get__('loadAppPackage');
const logRotate = index.__get__('logRotate');


describe('module', () => {
Expand Down Expand Up @@ -95,6 +98,41 @@ describe('loadAppPackage', () => {
});
});

describe('logRotate', () => {
const log = os.tmpdir() + '/temp.log';
const oldLog = os.tmpdir() + '/temp.old.log';

beforeEach(done => {
fs.unlink(oldLog, () => done());
});

it('should move log to a new path if its size exceeds maxSize', done => {
fs.writeFile(log, '7 bytes', err => {
if (err) {
return done(err);
}
logRotate(log, 5);
fs.stat(oldLog, e => done(e));
});
});

it('should not move log to a new path if its size not exceeds maxSize', done => {
fs.writeFile(log, '7 bytes', err => {
if (err) {
return done(err);
}
logRotate(log, 10);
fs.stat(oldLog, e => {
if (e) {
done();
} else {
done('Log is rotated when its size is not exceeds maxSize');
}
});
});
});
});

function requireLog() {
delete require.cache[require.resolve('./index')];
return require('./index');
Expand Down
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "electron-log",
"version": "1.0.12",
"version": "1.0.13",
"description": "Just a very simple logging module for your Electron application",
"main": "index.js",
"scripts": {
Expand Down

0 comments on commit af7e372

Please sign in to comment.