From 2ccf45ff8692443f6e5df5c3f152793d817794d1 Mon Sep 17 00:00:00 2001 From: hibas123 Date: Sun, 18 Feb 2018 16:00:16 +0100 Subject: [PATCH] Addic file size limits --- .vscode/launch.json | 18 +++++ .vscode/tasks.json | 16 +++++ out/index.d.ts | 4 +- out/index.js | 156 ++++++++++++++++++++++++++++++++++++------- out/index.js.map | 2 +- out/test.js | 5 ++ out/test.js.map | 2 +- src/index.ts | 157 +++++++++++++++++++++++++++++++++++++------- src/test.ts | 7 +- 9 files changed, 315 insertions(+), 52 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2ea2342 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + // Verwendet IntelliSense zum Ermitteln möglicher Attribute. + // Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen. + // Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Programm starten", + "program": "${workspaceFolder}\\out\\test.js", + "preLaunchTask": "build", + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ] + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..2ac40a8 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,16 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "type": "typescript", + "tsconfig": "tsconfig.json", + "identifier": "builld", + "label": "build", + "problemMatcher": [ + "$tsc" + ] + } + ] +} \ No newline at end of file diff --git a/out/index.d.ts b/out/index.d.ts index 77f97f8..2b7e17b 100644 --- a/out/index.d.ts +++ b/out/index.d.ts @@ -2,9 +2,11 @@ import { EventEmitter } from "events"; export declare class Logging { private static logFileLocation; - private static stdout; + static stdout: boolean; private static fileStream; private static errorStream; + private static fileSize; + private static errorSize; private static writing; private static queue; static events: EventEmitter; diff --git a/out/index.js b/out/index.js index e396646..3a17c56 100644 --- a/out/index.js +++ b/out/index.js @@ -27,6 +27,7 @@ const BgBlue = "\x1b[44m"; const BgMagenta = "\x1b[45m"; const BgCyan = "\x1b[46m"; const BgWhite = "\x1b[47m"; +const maxFileSize = 500000000; class Logging { static config(logfolder, stdout) { this.logFileLocation = logfolder; @@ -105,8 +106,8 @@ class Logging { index = m.indexOf("\x1b"); } if (this.logFileLocation) { - if (!this.fileStream || !this.errorStream) { - await Logging.initializeFile(); + if ((!this.fileStream || !this.errorStream) && !this.writing) { + Logging.initializeFile(); } Logging.writeMessageToFile(m, type === LoggingTypes.Error); } @@ -116,35 +117,60 @@ class Logging { Logging.queue.push({ message: message.replace("\n", " "), error: error }); Logging.checkQueue(); } - static checkQueue() { - if (Logging.writing) - return; - if (Logging.queue.length <= 0) - return; - Logging.writing = true; - var message = Logging.queue[0]; - Logging.fileStream.write(message.message + "\n", () => { - if (message.error) { - Logging.errorStream.write(message.message + "\n", () => { + static async checkQueue() { + try { + if (Logging.writing) + return; + if (Logging.queue.length <= 0) + return; + Logging.writing = true; + var message = Logging.queue[0]; + message.message += "\n"; + let data = new Buffer(message.message, "utf8"); + if (data.byteLength < maxFileSize && data.byteLength + Logging.fileSize > maxFileSize) { + Logging.fileStream.close(); + if (await fsExists(this.logFileLocation + "all.log.old")) + await fsUnlink(this.logFileLocation + "all.log.old"); + await fsMove(this.logFileLocation + "all.log", this.logFileLocation + "all.log.old"); + Logging.fileStream = fs.createWriteStream(this.logFileLocation + "all.log"); + Logging.fileSize = 0; + } + Logging.fileSize += data.byteLength; + Logging.fileStream.write(data, async () => { + if (message.error) { + if (data.byteLength < maxFileSize && data.byteLength + Logging.errorSize > maxFileSize) { + Logging.errorStream.close(); + if (await fsExists(this.logFileLocation + "error.log.old")) + await fsUnlink(this.logFileLocation + "error.log.old"); + await fsMove(this.logFileLocation + "error.log", this.logFileLocation + "error.log.old"); + Logging.errorStream = fs.createWriteStream(this.logFileLocation + "error.log"); + Logging.errorSize = 0; + } + Logging.errorSize += data.byteLength; + Logging.errorStream.write(data, () => { + Logging.queue.splice(Logging.queue.indexOf(message), 1); + Logging.writing = false; + Logging.checkQueue(); + }); + } + else { Logging.queue.splice(Logging.queue.indexOf(message), 1); Logging.writing = false; Logging.checkQueue(); - }); - } - else { - Logging.queue.splice(Logging.queue.indexOf(message), 1); - Logging.writing = false; - Logging.checkQueue(); - } - }); + } + }); + } + catch (e) { + console.log(e); + } } static async initializeFile() { if (this.fileStream && this.errorStream) return; if (!this.logFileLocation) return; + this.writing = true; try { - var exists = util.promisify(fs.exists); await new Promise((resolve, reject) => { fs.exists(this.logFileLocation, (exists) => { if (!exists) { @@ -161,10 +187,26 @@ class Logging { resolve(); }); }); - Logging.fileStream = fs.createWriteStream(this.logFileLocation + "all.log", { flags: "a" }); - Logging.fileStream.write("\n"); - Logging.errorStream = fs.createWriteStream(this.logFileLocation + "error.log", { flags: "a" }); - Logging.errorStream.write("\n"); + if (await fsExists(this.logFileLocation + "all.log")) { + if (await fsExists(this.logFileLocation + "all.log.old")) + await fsUnlink(this.logFileLocation + "all.log.old"); + await fsMove(this.logFileLocation + "all.log", this.logFileLocation + "all.log.old"); + } + if (await fsExists(this.logFileLocation + "error.log")) { + let stats = await fsStat(this.logFileLocation + "error.log"); + if (stats.size > maxFileSize) { + if (await fsExists(this.logFileLocation + "error.log.old")) + await fsUnlink(this.logFileLocation + "error.log.old"); + await fsMove(this.logFileLocation + "error.log", this.logFileLocation + "error.log.old"); + } + else { + this.errorSize = stats.size; + } + } + this.fileStream = fs.createWriteStream(this.logFileLocation + "all.log", { flags: "a" }); + this.errorStream = fs.createWriteStream(this.logFileLocation + "error.log", { flags: "a" }); + this.writing = false; + this.checkQueue(); } catch (e) { console.log(e); @@ -173,10 +215,74 @@ class Logging { } Logging.logFileLocation = "./logs/"; Logging.stdout = true; +Logging.fileSize = 0; +Logging.errorSize = 0; Logging.writing = false; Logging.queue = new Array(); Logging.events = new events_1.EventEmitter(); exports.Logging = Logging; +function fsUnlink(path) { + return new Promise((resolve, reject) => { + fs.unlink(path, (err) => { + if (err) + reject(err); + else + resolve(); + }); + }); +} +function fsStat(path) { + return new Promise((resolve, reject) => { + fs.stat(path, (err, stats) => { + if (err) + reject(err); + else + resolve(stats); + }); + }); +} +function fsMove(oldPath, newPath) { + return new Promise((resolve, reject) => { + let callback = (err) => { + if (err) + reject(err); + else + resolve(); + }; + fs.rename(oldPath, newPath, function (err) { + if (err) { + if (err.code === 'EXDEV') { + copy(); + } + else { + callback(err); + } + return; + } + callback(); + }); + function copy() { + var readStream = fs.createReadStream(oldPath); + var writeStream = fs.createWriteStream(newPath); + readStream.on('error', callback); + writeStream.on('error', callback); + readStream.on('close', function () { + fs.unlink(oldPath, callback); + }); + readStream.pipe(writeStream); + } + }); +} +function fsExists(path) { + return new Promise((resolve, reject) => { + fs.exists(path, resolve); + }); +} +function fsMkDir(path) { + return new Promise((resolve, reject) => { + fs.exists(path, resolve); + }); +} function _getCallerFile() { try { var err = new Error(); diff --git a/out/index.js.map b/out/index.js.map index 94a55db..bd7009f 100644 --- a/out/index.js.map +++ b/out/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out/test.js b/out/test.js index 8888ba7..4fb2a15 100644 --- a/out/test.js +++ b/out/test.js @@ -1,9 +1,14 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const index_1 = require("./index"); +const crypto_1 = require("crypto"); index_1.Logging.log("test"); index_1.Logging.log("i", "am", { a: "an" }, 1000); index_1.Logging.error(new Error("fehler 001")); index_1.Logging.debug("Some Debug infos"); index_1.Logging.errorMessage("i", "am", "an", "error"); +index_1.Logging.stdout = false; +for (let i = 0; i < 7000; i++) { + index_1.Logging.log(crypto_1.randomBytes(50000).toString("hex")); +} //# sourceMappingURL=test.js.map \ No newline at end of file diff --git a/out/test.js.map b/out/test.js.map index 1981f49..19bddd6 100644 --- a/out/test.js.map +++ b/out/test.js.map @@ -1 +1 @@ -{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,mCAAkC;AAElC,eAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACnB,eAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AAC1C,eAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;AACvC,eAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAClC,eAAO,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,mCAAkC;AAClC,mCAAqC;AAErC,eAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACnB,eAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AAC1C,eAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;AACvC,eAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AAClC,eAAO,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/C,eAAO,CAAC,MAAM,GAAG,KAAK,CAAC;AACvB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,eAAO,CAAC,GAAG,CAAC,oBAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AAClD,CAAC"} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 251f07f..13011e3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -29,12 +29,16 @@ const BgMagenta = "\x1b[45m" const BgCyan = "\x1b[46m" const BgWhite = "\x1b[47m" +const maxFileSize = 500000000; + export class Logging { private static logFileLocation: string = "./logs/"; - private static stdout: boolean = true; + public static stdout: boolean = true; private static fileStream: fs.WriteStream; private static errorStream: fs.WriteStream; + private static fileSize: number = 0; + private static errorSize: number = 0; private static writing = false; private static queue = new Array<{ message: string, error: boolean }>(); @@ -123,8 +127,8 @@ export class Logging { } if (this.logFileLocation) { - if (!this.fileStream || !this.errorStream) { - await Logging.initializeFile(); + if ((!this.fileStream || !this.errorStream) && !this.writing) { + Logging.initializeFile(); } Logging.writeMessageToFile(m, type === LoggingTypes.Error); } @@ -136,31 +140,55 @@ export class Logging { Logging.checkQueue(); } - private static checkQueue() { - if (Logging.writing) return; - if (Logging.queue.length <= 0) return; - Logging.writing = true; - var message = Logging.queue[0]; - Logging.fileStream.write(message.message + "\n", () => { - if (message.error) { - Logging.errorStream.write(message.message + "\n", () => { + private static async checkQueue() { + try { + if (Logging.writing) return; + if (Logging.queue.length <= 0) return; + Logging.writing = true; + var message = Logging.queue[0]; + message.message += "\n"; + let data = new Buffer(message.message, "utf8"); + if (data.byteLength < maxFileSize && data.byteLength + Logging.fileSize > maxFileSize) { + Logging.fileStream.close(); + if (await fsExists(this.logFileLocation + "all.log.old")) + await fsUnlink(this.logFileLocation + "all.log.old"); + await fsMove(this.logFileLocation + "all.log", this.logFileLocation + "all.log.old") + Logging.fileStream = fs.createWriteStream(this.logFileLocation + "all.log"); + Logging.fileSize = 0; + } + Logging.fileSize += data.byteLength; + Logging.fileStream.write(data, async () => { + if (message.error) { + if (data.byteLength < maxFileSize && data.byteLength + Logging.errorSize > maxFileSize) { + Logging.errorStream.close(); + if (await fsExists(this.logFileLocation + "error.log.old")) + await fsUnlink(this.logFileLocation + "error.log.old"); + await fsMove(this.logFileLocation + "error.log", this.logFileLocation + "error.log.old") + Logging.errorStream = fs.createWriteStream(this.logFileLocation + "error.log"); + Logging.errorSize = 0; + } + Logging.errorSize += data.byteLength; + Logging.errorStream.write(data, () => { + Logging.queue.splice(Logging.queue.indexOf(message), 1); + Logging.writing = false; + Logging.checkQueue(); + }); + } else { Logging.queue.splice(Logging.queue.indexOf(message), 1); Logging.writing = false; Logging.checkQueue(); - }); - } else { - Logging.queue.splice(Logging.queue.indexOf(message), 1); - Logging.writing = false; - Logging.checkQueue(); - } - }); + } + }); + } catch (e) { + console.log(e) + } } private static async initializeFile() { if (this.fileStream && this.errorStream) return; if (!this.logFileLocation) return; + this.writing = true; try { - var exists = util.promisify(fs.exists); await new Promise((resolve, reject) => { fs.exists(this.logFileLocation, (exists) => { if (!exists) { @@ -175,16 +203,99 @@ export class Logging { }); }); - Logging.fileStream = fs.createWriteStream(this.logFileLocation + "all.log", { flags: "a" }); - Logging.fileStream.write("\n"); - Logging.errorStream = fs.createWriteStream(this.logFileLocation + "error.log", { flags: "a" }); - Logging.errorStream.write("\n"); + if (await fsExists(this.logFileLocation + "all.log")) { + if (await fsExists(this.logFileLocation + "all.log.old")) + await fsUnlink(this.logFileLocation + "all.log.old"); + await fsMove(this.logFileLocation + "all.log", this.logFileLocation + "all.log.old") + } + + if (await fsExists(this.logFileLocation + "error.log")) { + let stats = await fsStat(this.logFileLocation + "error.log") + if (stats.size > maxFileSize) { + if (await fsExists(this.logFileLocation + "error.log.old")) + await fsUnlink(this.logFileLocation + "error.log.old"); + await fsMove(this.logFileLocation + "error.log", this.logFileLocation + "error.log.old") + } else { + this.errorSize = stats.size; + } + } + + this.fileStream = fs.createWriteStream(this.logFileLocation + "all.log", { flags: "a" }); + this.errorStream = fs.createWriteStream(this.logFileLocation + "error.log", { flags: "a" }); + this.writing = false; + this.checkQueue(); } catch (e) { console.log(e); } } } +function fsUnlink(path) { + return new Promise((resolve, reject) => { + fs.unlink(path, (err) => { + if (err) reject(err); + else resolve(); + }) + }) +} + +function fsStat(path: string) { + return new Promise((resolve, reject) => { + fs.stat(path, (err, stats) => { + if (err) reject(err); + else resolve(stats); + }) + }) +} + +function fsMove(oldPath, newPath) { + return new Promise((resolve, reject) => { + + let callback = (err?) => { + if (err) reject(err) + else resolve() + } + + fs.rename(oldPath, newPath, function (err) { + if (err) { + if (err.code === 'EXDEV') { + copy(); + } else { + callback(err) + } + return; + } + callback() + }); + + function copy() { + var readStream = fs.createReadStream(oldPath); + var writeStream = fs.createWriteStream(newPath); + + readStream.on('error', callback); + writeStream.on('error', callback); + + readStream.on('close', function () { + fs.unlink(oldPath, callback); + }); + + readStream.pipe(writeStream); + } + }) +} + +function fsExists(path) { + return new Promise((resolve, reject) => { + fs.exists(path, resolve); + }); +} + +function fsMkDir(path) { + return new Promise((resolve, reject) => { + fs.exists(path, resolve); + }); +} + function _getCallerFile() { try { var err = new Error(); diff --git a/src/test.ts b/src/test.ts index a6a9d94..cff576c 100644 --- a/src/test.ts +++ b/src/test.ts @@ -1,7 +1,12 @@ import { Logging } from "./index"; +import { randomBytes } from "crypto"; Logging.log("test") Logging.log("i", "am", { a: "an" }, 1000); Logging.error(new Error("fehler 001")); Logging.debug("Some Debug infos"); -Logging.errorMessage("i", "am", "an", "error"); \ No newline at end of file +Logging.errorMessage("i", "am", "an", "error"); +Logging.stdout = false; +for (let i = 0; i < 7000; i++) { + Logging.log(randomBytes(50000).toString("hex")) +} \ No newline at end of file