namirasoft-log 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +205 -0
- package/dist/BaseFormatter.d.ts +6 -0
- package/dist/BaseFormatter.js +28 -0
- package/dist/BaseFormatter.js.map +1 -0
- package/dist/FormatterFull.d.ts +6 -0
- package/dist/FormatterFull.js +33 -0
- package/dist/FormatterFull.js.map +1 -0
- package/dist/FormatterShort.d.ts +6 -0
- package/dist/FormatterShort.js +26 -0
- package/dist/FormatterShort.js.map +1 -0
- package/dist/IFormatter.d.ts +4 -0
- package/dist/IFormatter.js +3 -0
- package/dist/IFormatter.js.map +1 -0
- package/dist/ILogger.d.ts +15 -0
- package/dist/ILogger.js +3 -0
- package/dist/ILogger.js.map +1 -0
- package/dist/IStream.d.ts +4 -0
- package/dist/IStream.js +3 -0
- package/dist/IStream.js.map +1 -0
- package/dist/Log.d.ts +9 -0
- package/dist/Log.js +14 -0
- package/dist/Log.js.map +1 -0
- package/dist/LogLevel.d.ts +10 -0
- package/dist/LogLevel.js +15 -0
- package/dist/LogLevel.js.map +1 -0
- package/dist/Logger.d.ts +26 -0
- package/dist/Logger.js +108 -0
- package/dist/Logger.js.map +1 -0
- package/dist/NamirasoftLogServer.d.ts +2 -0
- package/dist/NamirasoftLogServer.js +7 -0
- package/dist/NamirasoftLogServer.js.map +1 -0
- package/dist/StreamConsole.d.ts +5 -0
- package/dist/StreamConsole.js +41 -0
- package/dist/StreamConsole.js.map +1 -0
- package/dist/StreamFile.d.ts +13 -0
- package/dist/StreamFile.js +79 -0
- package/dist/StreamFile.js.map +1 -0
- package/dist/StreamNamirasoftLog.d.ts +7 -0
- package/dist/StreamNamirasoftLog.js +23 -0
- package/dist/StreamNamirasoftLog.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/package.json +13 -0
- package/src/BaseFormatter.ts +28 -0
- package/src/FormatterFull.ts +22 -0
- package/src/FormatterShort.ts +15 -0
- package/src/IFormatter.ts +6 -0
- package/src/ILogger.ts +17 -0
- package/src/IStream.ts +5 -0
- package/src/Log.ts +18 -0
- package/src/LogLevel.ts +11 -0
- package/src/Logger.ts +89 -0
- package/src/NamirasoftLogServer.ts +3 -0
- package/src/StreamConsole.ts +31 -0
- package/src/StreamFile.ts +52 -0
- package/src/StreamNamirasoftLog.ts +14 -0
- package/src/index.ts +13 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamConsole.js","sourceRoot":"","sources":["../src/StreamConsole.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,yCAAsC;AAEtC,MAAa,aAAa;IAEhB,KAAK,CAAC,GAAQ,EAAE,QAAkB;;YAEpC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAEjB,IAAI,GAAG,CAAC,KAAK,IAAI,mBAAQ,CAAC,KAAK;oBAC3B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;qBAChB,IAAI,GAAG,CAAC,KAAK,IAAI,mBAAQ,CAAC,OAAO;oBAClC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBACd,IAAI,GAAG,CAAC,KAAK,IAAI,mBAAQ,CAAC,KAAK;oBAChC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;qBAChB,IAAI,GAAG,CAAC,KAAK,IAAI,mBAAQ,CAAC,IAAI;oBAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACf,IAAI,GAAG,CAAC,KAAK,IAAI,mBAAQ,CAAC,OAAO;oBAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACf,IAAI,GAAG,CAAC,KAAK,IAAI,mBAAQ,CAAC,KAAK;oBAChC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;qBAChB,IAAI,GAAG,CAAC,KAAK,IAAI,mBAAQ,CAAC,QAAQ;oBACnC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;qBAChB,IAAI,GAAG,CAAC,KAAK,IAAI,mBAAQ,CAAC,KAAK;oBAChC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;oBAEjB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAA;QACN,CAAC;KAAA;CACJ;AA1BD,sCA0BC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IStream } from "./IStream";
|
|
2
|
+
import { Log } from "./Log";
|
|
3
|
+
export declare class StreamFile implements IStream {
|
|
4
|
+
private baseName;
|
|
5
|
+
private basePath;
|
|
6
|
+
seprateByDate: boolean;
|
|
7
|
+
seprateByLevel: boolean;
|
|
8
|
+
seprateByGroup: boolean;
|
|
9
|
+
constructor(basePath?: string);
|
|
10
|
+
private getPackageName;
|
|
11
|
+
private getFilePath;
|
|
12
|
+
write(log: Log, formated: string[]): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.StreamFile = void 0;
|
|
36
|
+
const fs = __importStar(require("fs"));
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
class StreamFile {
|
|
39
|
+
constructor(basePath = "./") {
|
|
40
|
+
this.seprateByDate = true;
|
|
41
|
+
this.seprateByLevel = true;
|
|
42
|
+
this.seprateByGroup = false;
|
|
43
|
+
this.basePath = basePath;
|
|
44
|
+
this.baseName = this.getPackageName();
|
|
45
|
+
}
|
|
46
|
+
getPackageName() {
|
|
47
|
+
let pkgPath = path.resolve(process.cwd(), "");
|
|
48
|
+
if (!pkgPath.endsWith('package.json')) {
|
|
49
|
+
pkgPath = path.join(pkgPath, 'package.json');
|
|
50
|
+
}
|
|
51
|
+
if (fs.existsSync(pkgPath)) {
|
|
52
|
+
let json = fs.readFileSync(pkgPath) + "";
|
|
53
|
+
let pkg = JSON.parse(json);
|
|
54
|
+
return pkg.name;
|
|
55
|
+
}
|
|
56
|
+
return "";
|
|
57
|
+
}
|
|
58
|
+
getFilePath(log) {
|
|
59
|
+
let names = [this.baseName];
|
|
60
|
+
if (this.seprateByDate)
|
|
61
|
+
names.push(log.date.getFullYear() + "-" + (log.date.getMonth() + 1) + "-" + log.date.getDate());
|
|
62
|
+
if (this.seprateByGroup)
|
|
63
|
+
if (log.group)
|
|
64
|
+
names.push(log.group);
|
|
65
|
+
if (this.seprateByLevel)
|
|
66
|
+
names.push(log.level + "");
|
|
67
|
+
names.push(".log");
|
|
68
|
+
let name = names.join("-");
|
|
69
|
+
return path.resolve(this.basePath, name);
|
|
70
|
+
}
|
|
71
|
+
write(log, formated) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
let filePath = this.getFilePath(log);
|
|
74
|
+
fs.appendFile(filePath, formated.join("\n"), () => { });
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.StreamFile = StreamFile;
|
|
79
|
+
//# sourceMappingURL=StreamFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamFile.js","sourceRoot":"","sources":["../src/StreamFile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAI7B,MAAa,UAAU;IAOnB,YAAY,WAAmB,IAAI;QAHnC,kBAAa,GAAY,IAAI,CAAC;QAC9B,mBAAc,GAAY,IAAI,CAAC;QAC/B,mBAAc,GAAY,KAAK,CAAC;QAG5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1C,CAAC;IACO,cAAc;QAElB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EACrC;YACI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;SAChD;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAC1B;YACI,IAAI,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACzC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,GAAG,CAAC,IAAI,CAAC;SACnB;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IACO,WAAW,CAAC,GAAQ;QAExB,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,aAAa;YAClB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpG,IAAI,IAAI,CAAC,cAAc;YACnB,IAAI,GAAG,CAAC,KAAK;gBACT,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,cAAc;YACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IACK,KAAK,CAAC,GAAQ,EAAE,QAAkB;;YAEpC,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACrC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;KAAA;CACJ;AA9CD,gCA8CC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.StreamNamirasoftLog = void 0;
|
|
13
|
+
class StreamNamirasoftLog {
|
|
14
|
+
constructor(token) {
|
|
15
|
+
this.token = token;
|
|
16
|
+
}
|
|
17
|
+
write(_, __) {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.StreamNamirasoftLog = StreamNamirasoftLog;
|
|
23
|
+
//# sourceMappingURL=StreamNamirasoftLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamNamirasoftLog.js","sourceRoot":"","sources":["../src/StreamNamirasoftLog.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,MAAa,mBAAmB;IAG5B,YAAY,KAAa;QAErB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IACK,KAAK,CAAC,CAAM,EAAE,EAAY;;QAEhC,CAAC;KAAA;CACJ;AAVD,kDAUC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from "./BaseFormatter";
|
|
2
|
+
export * from "./FormatterFull";
|
|
3
|
+
export * from "./FormatterShort";
|
|
4
|
+
export * from "./IFormatter";
|
|
5
|
+
export * from "./ILogger";
|
|
6
|
+
export * from "./IStream";
|
|
7
|
+
export * from "./Log";
|
|
8
|
+
export * from "./Logger";
|
|
9
|
+
export * from "./LogLevel";
|
|
10
|
+
export * from "./NamirasoftLogServer";
|
|
11
|
+
export * from "./StreamConsole";
|
|
12
|
+
export * from "./StreamFile";
|
|
13
|
+
export * from "./StreamNamirasoftLog";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./BaseFormatter"), exports);
|
|
18
|
+
__exportStar(require("./FormatterFull"), exports);
|
|
19
|
+
__exportStar(require("./FormatterShort"), exports);
|
|
20
|
+
__exportStar(require("./IFormatter"), exports);
|
|
21
|
+
__exportStar(require("./ILogger"), exports);
|
|
22
|
+
__exportStar(require("./IStream"), exports);
|
|
23
|
+
__exportStar(require("./Log"), exports);
|
|
24
|
+
__exportStar(require("./Logger"), exports);
|
|
25
|
+
__exportStar(require("./LogLevel"), exports);
|
|
26
|
+
__exportStar(require("./NamirasoftLogServer"), exports);
|
|
27
|
+
__exportStar(require("./StreamConsole"), exports);
|
|
28
|
+
__exportStar(require("./StreamFile"), exports);
|
|
29
|
+
__exportStar(require("./StreamNamirasoftLog"), exports);
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,kDAAgC;AAChC,mDAAiC;AACjC,+CAA6B;AAC7B,4CAA0B;AAC1B,4CAA0B;AAC1B,wCAAsB;AACtB,2CAAyB;AACzB,6CAA2B;AAC3B,wDAAsC;AACtC,kDAAgC;AAChC,+CAA6B;AAC7B,wDAAsC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "namirasoft-log",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Namira Software Corporation Log Package",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"scripts": {},
|
|
8
|
+
"author": "Amir Abolhasani",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"@types/node": "^20.8.8"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export abstract class BaseFormatter
|
|
2
|
+
{
|
|
3
|
+
protected formatDateTime(date: Date)
|
|
4
|
+
{
|
|
5
|
+
return this.formatDate(date) + " " + this.formatTime(date);
|
|
6
|
+
}
|
|
7
|
+
protected formatDate(date: Date)
|
|
8
|
+
{
|
|
9
|
+
const year = date.getFullYear();
|
|
10
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
11
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
12
|
+
return `${year}-${month}-${day}`;
|
|
13
|
+
}
|
|
14
|
+
protected formatTime(date: Date)
|
|
15
|
+
{
|
|
16
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
|
17
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
18
|
+
const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
19
|
+
return `${hours}:${minutes}:${seconds}`;
|
|
20
|
+
}
|
|
21
|
+
protected qoute(text: string, size: number, filler: string)
|
|
22
|
+
{
|
|
23
|
+
let count = (size - text.length) / 2;
|
|
24
|
+
text = text.padStart(text.length + count, filler);
|
|
25
|
+
text = text.padEnd(size, filler);
|
|
26
|
+
return text;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BaseFormatter } from "./BaseFormatter";
|
|
2
|
+
import { IFormatter } from "./IFormatter";
|
|
3
|
+
import { Log } from "./Log";
|
|
4
|
+
import { LogLevel } from "./LogLevel";
|
|
5
|
+
|
|
6
|
+
export class FormatterFull extends BaseFormatter implements IFormatter
|
|
7
|
+
{
|
|
8
|
+
async format(log: Log): Promise<string[]>
|
|
9
|
+
{
|
|
10
|
+
let ans: string[] = [];
|
|
11
|
+
ans.push(this.qoute(this.formatDateTime(log.date), 100, '-'));
|
|
12
|
+
ans.push("Level: " + LogLevel[log.level]);
|
|
13
|
+
if (log.group)
|
|
14
|
+
ans.push("Group: " + log.group);
|
|
15
|
+
ans.push("Message: " + log.message);
|
|
16
|
+
if (log.stack)
|
|
17
|
+
ans.push("Stack: " + log.stack);
|
|
18
|
+
ans.push(this.qoute("", 100, '-'));
|
|
19
|
+
ans.push("");
|
|
20
|
+
return ans;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseFormatter } from "./BaseFormatter";
|
|
2
|
+
import { IFormatter } from "./IFormatter";
|
|
3
|
+
import { Log } from "./Log";
|
|
4
|
+
|
|
5
|
+
export class FormatterShort extends BaseFormatter implements IFormatter
|
|
6
|
+
{
|
|
7
|
+
async format(log: Log): Promise<string[]>
|
|
8
|
+
{
|
|
9
|
+
let ans: string[] = [];
|
|
10
|
+
ans.push(this.formatDateTime(log.date) + ": " + [log.group, log.message].filter(m => m).join(" - "));
|
|
11
|
+
if (log.stack)
|
|
12
|
+
ans.push(log.stack);
|
|
13
|
+
return ans;
|
|
14
|
+
}
|
|
15
|
+
}
|
package/src/ILogger.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LogLevel } from "./LogLevel";
|
|
2
|
+
|
|
3
|
+
export interface ILogger
|
|
4
|
+
{
|
|
5
|
+
log(level: LogLevel, message: string, group?: string, stack?: string): Promise<void>;
|
|
6
|
+
trace(message: string, group?: string, stack?: string): Promise<void>;
|
|
7
|
+
verbose(message: string, group?: string, stack?: string): Promise<void>;
|
|
8
|
+
debug(message: string, group?: string, stack?: string): Promise<void>;
|
|
9
|
+
info(message: string, group?: string, stack?: string): Promise<void>;
|
|
10
|
+
warning(message: string, group?: string, stack?: string): Promise<void>;
|
|
11
|
+
error(message: string, group?: string, stack?: string): Promise<void>;
|
|
12
|
+
critical(message: string, group?: string, stack?: string): Promise<void>;
|
|
13
|
+
fatal(message: string, group?: string, stack?: string): Promise<void>;
|
|
14
|
+
onCatchError(error: Error, group?: string): Promise<void>;
|
|
15
|
+
onCatchCritical(error: Error, group?: string): Promise<void>;
|
|
16
|
+
onCatchFatal(error: Error, group?: string): Promise<void>;
|
|
17
|
+
}
|
package/src/IStream.ts
ADDED
package/src/Log.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LogLevel } from "./LogLevel";
|
|
2
|
+
|
|
3
|
+
export class Log
|
|
4
|
+
{
|
|
5
|
+
date: Date;
|
|
6
|
+
level: LogLevel;
|
|
7
|
+
group: string;
|
|
8
|
+
message: string;
|
|
9
|
+
stack: string;
|
|
10
|
+
constructor(level: LogLevel, message: string, group?: string, stack?: string)
|
|
11
|
+
{
|
|
12
|
+
this.date = new Date();
|
|
13
|
+
this.level = level;
|
|
14
|
+
this.message = message;
|
|
15
|
+
this.group = group ?? "";
|
|
16
|
+
this.stack = stack ?? "";
|
|
17
|
+
}
|
|
18
|
+
}
|
package/src/LogLevel.ts
ADDED
package/src/Logger.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { FormatterFull } from "./FormatterFull";
|
|
2
|
+
import { IFormatter } from "./IFormatter";
|
|
3
|
+
import { ILogger } from "./ILogger";
|
|
4
|
+
import { IStream } from "./IStream";
|
|
5
|
+
import { Log } from "./Log";
|
|
6
|
+
import { LogLevel } from "./LogLevel";
|
|
7
|
+
import { StreamConsole } from "./StreamConsole";
|
|
8
|
+
|
|
9
|
+
export class Logger implements ILogger
|
|
10
|
+
{
|
|
11
|
+
private defaultStream: IStream = new StreamConsole();
|
|
12
|
+
private formatter?: IFormatter = new FormatterFull();
|
|
13
|
+
private customFormatter: { [level: string]: IFormatter } = {};
|
|
14
|
+
private streams: IStream[] = [];
|
|
15
|
+
setFromatter(formatter: IFormatter): void
|
|
16
|
+
{
|
|
17
|
+
this.formatter = formatter;
|
|
18
|
+
}
|
|
19
|
+
setCustomFormatter(level: LogLevel, formatter: IFormatter): void
|
|
20
|
+
{
|
|
21
|
+
this.customFormatter[level] = formatter;
|
|
22
|
+
}
|
|
23
|
+
addStream(stream: IStream)
|
|
24
|
+
{
|
|
25
|
+
this.streams.push(stream);
|
|
26
|
+
}
|
|
27
|
+
async log(level: LogLevel, message: string, group?: string, stack?: string)
|
|
28
|
+
{
|
|
29
|
+
let log = new Log(level, message, group, stack);
|
|
30
|
+
let formatted: string[] = [];
|
|
31
|
+
let formatter = this.customFormatter[level.toString()] ?? this.formatter;
|
|
32
|
+
if (formatter)
|
|
33
|
+
formatted = await formatter.format(log);
|
|
34
|
+
if (this.streams.length == 0)
|
|
35
|
+
this.defaultStream.write(log, formatted);
|
|
36
|
+
else
|
|
37
|
+
{
|
|
38
|
+
let ps = this.streams.map(s => s.write(log, formatted));
|
|
39
|
+
await Promise.all(ps);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async trace(message: string, group?: string, stack?: string)
|
|
43
|
+
{
|
|
44
|
+
await this.log(LogLevel.Trace, message, group, stack);
|
|
45
|
+
}
|
|
46
|
+
async verbose(message: string, group?: string, stack?: string)
|
|
47
|
+
{
|
|
48
|
+
await this.log(LogLevel.Verbose, message, group, stack);
|
|
49
|
+
}
|
|
50
|
+
async debug(message: string, group?: string, stack?: string)
|
|
51
|
+
{
|
|
52
|
+
await this.log(LogLevel.Debug, message, group, stack);
|
|
53
|
+
}
|
|
54
|
+
async info(message: string, group?: string, stack?: string)
|
|
55
|
+
{
|
|
56
|
+
await this.log(LogLevel.Info, message, group, stack);
|
|
57
|
+
}
|
|
58
|
+
async warning(message: string, group?: string, stack?: string)
|
|
59
|
+
{
|
|
60
|
+
await this.log(LogLevel.Warning, message, group, stack);
|
|
61
|
+
}
|
|
62
|
+
async error(message: string, group?: string, stack?: string)
|
|
63
|
+
{
|
|
64
|
+
await this.log(LogLevel.Error, message, group, stack);
|
|
65
|
+
}
|
|
66
|
+
async critical(message: string, group?: string, stack?: string)
|
|
67
|
+
{
|
|
68
|
+
await this.log(LogLevel.Critical, message, group, stack);
|
|
69
|
+
}
|
|
70
|
+
async fatal(message: string, group?: string, stack?: string)
|
|
71
|
+
{
|
|
72
|
+
await this.log(LogLevel.Fatal, message, group, stack);
|
|
73
|
+
}
|
|
74
|
+
async onCatchError(error: Error, group?: string)
|
|
75
|
+
{
|
|
76
|
+
await this.error(error.message, group, error.stack);
|
|
77
|
+
}
|
|
78
|
+
async onCatchCritical(error: Error, group?: string)
|
|
79
|
+
{
|
|
80
|
+
await this.critical(error.message, group, error.stack);
|
|
81
|
+
}
|
|
82
|
+
async onCatchFatal(error: Error, group?: string)
|
|
83
|
+
{
|
|
84
|
+
await this.fatal(error.message, group, error.stack);
|
|
85
|
+
}
|
|
86
|
+
initUncought()
|
|
87
|
+
{
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { IStream } from "./IStream";
|
|
2
|
+
import { Log } from "./Log";
|
|
3
|
+
import { LogLevel } from './LogLevel';
|
|
4
|
+
|
|
5
|
+
export class StreamConsole implements IStream
|
|
6
|
+
{
|
|
7
|
+
async write(log: Log, formated: string[]): Promise<void>
|
|
8
|
+
{
|
|
9
|
+
formated.forEach(f =>
|
|
10
|
+
{
|
|
11
|
+
if (log.level == LogLevel.Trace)
|
|
12
|
+
console.trace(f);
|
|
13
|
+
else if (log.level == LogLevel.Verbose)
|
|
14
|
+
console.log(f);
|
|
15
|
+
else if (log.level == LogLevel.Debug)
|
|
16
|
+
console.debug(f);
|
|
17
|
+
else if (log.level == LogLevel.Info)
|
|
18
|
+
console.info(f);
|
|
19
|
+
else if (log.level == LogLevel.Warning)
|
|
20
|
+
console.warn(f);
|
|
21
|
+
else if (log.level == LogLevel.Error)
|
|
22
|
+
console.error(f);
|
|
23
|
+
else if (log.level == LogLevel.Critical)
|
|
24
|
+
console.error(f);
|
|
25
|
+
else if (log.level == LogLevel.Fatal)
|
|
26
|
+
console.error(f);
|
|
27
|
+
else
|
|
28
|
+
console.log(f);
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { IStream } from "./IStream";
|
|
4
|
+
import { Log } from "./Log";
|
|
5
|
+
|
|
6
|
+
export class StreamFile implements IStream
|
|
7
|
+
{
|
|
8
|
+
private baseName: string;
|
|
9
|
+
private basePath: string;
|
|
10
|
+
seprateByDate: boolean = true;
|
|
11
|
+
seprateByLevel: boolean = true;
|
|
12
|
+
seprateByGroup: boolean = false;
|
|
13
|
+
constructor(basePath: string = "./")
|
|
14
|
+
{
|
|
15
|
+
this.basePath = basePath;
|
|
16
|
+
this.baseName = this.getPackageName();
|
|
17
|
+
}
|
|
18
|
+
private getPackageName()
|
|
19
|
+
{
|
|
20
|
+
let pkgPath = path.resolve(process.cwd(), "");
|
|
21
|
+
if (!pkgPath.endsWith('package.json'))
|
|
22
|
+
{
|
|
23
|
+
pkgPath = path.join(pkgPath, 'package.json');
|
|
24
|
+
}
|
|
25
|
+
if (fs.existsSync(pkgPath))
|
|
26
|
+
{
|
|
27
|
+
let json = fs.readFileSync(pkgPath) + "";
|
|
28
|
+
let pkg = JSON.parse(json);
|
|
29
|
+
return pkg.name;
|
|
30
|
+
}
|
|
31
|
+
return "";
|
|
32
|
+
}
|
|
33
|
+
private getFilePath(log: Log): string
|
|
34
|
+
{
|
|
35
|
+
let names = [this.baseName];
|
|
36
|
+
if (this.seprateByDate)
|
|
37
|
+
names.push(log.date.getFullYear() + "-" + (log.date.getMonth() + 1) + "-" + log.date.getDate());
|
|
38
|
+
if (this.seprateByGroup)
|
|
39
|
+
if (log.group)
|
|
40
|
+
names.push(log.group);
|
|
41
|
+
if (this.seprateByLevel)
|
|
42
|
+
names.push(log.level + "");
|
|
43
|
+
names.push(".log");
|
|
44
|
+
let name = names.join("-");
|
|
45
|
+
return path.resolve(this.basePath, name);
|
|
46
|
+
}
|
|
47
|
+
async write(log: Log, formated: string[]): Promise<void>
|
|
48
|
+
{
|
|
49
|
+
let filePath = this.getFilePath(log);
|
|
50
|
+
fs.appendFile(filePath, formated.join("\n"), () => { });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IStream } from "./IStream";
|
|
2
|
+
import { Log } from "./Log";
|
|
3
|
+
|
|
4
|
+
export class StreamNamirasoftLog implements IStream
|
|
5
|
+
{
|
|
6
|
+
token: string;
|
|
7
|
+
constructor(token: string)
|
|
8
|
+
{
|
|
9
|
+
this.token = token;
|
|
10
|
+
}
|
|
11
|
+
async write(_: Log, __: string[]): Promise<void>
|
|
12
|
+
{
|
|
13
|
+
}
|
|
14
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from "./BaseFormatter";
|
|
2
|
+
export * from "./FormatterFull";
|
|
3
|
+
export * from "./FormatterShort";
|
|
4
|
+
export * from "./IFormatter";
|
|
5
|
+
export * from "./ILogger";
|
|
6
|
+
export * from "./IStream";
|
|
7
|
+
export * from "./Log";
|
|
8
|
+
export * from "./Logger";
|
|
9
|
+
export * from "./LogLevel";
|
|
10
|
+
export * from "./NamirasoftLogServer";
|
|
11
|
+
export * from "./StreamConsole";
|
|
12
|
+
export * from "./StreamFile";
|
|
13
|
+
export * from "./StreamNamirasoftLog";
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES6",
|
|
4
|
+
"module": "CommonJS",
|
|
5
|
+
"rootDir": "./src",
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"lib": [
|
|
8
|
+
"es6",
|
|
9
|
+
"dom"
|
|
10
|
+
],
|
|
11
|
+
"allowJs": false,
|
|
12
|
+
"checkJs": false,
|
|
13
|
+
"strict": true,
|
|
14
|
+
"esModuleInterop": true,
|
|
15
|
+
"sourceMap": true,
|
|
16
|
+
"resolveJsonModule": true,
|
|
17
|
+
"declaration": true,
|
|
18
|
+
"noUnusedLocals": true,
|
|
19
|
+
"noUnusedParameters": true,
|
|
20
|
+
"noImplicitAny": true,
|
|
21
|
+
"noImplicitOverride": true,
|
|
22
|
+
"noImplicitReturns": true,
|
|
23
|
+
"noImplicitThis": true,
|
|
24
|
+
"skipLibCheck": false,
|
|
25
|
+
"allowSyntheticDefaultImports": true,
|
|
26
|
+
"forceConsistentCasingInFileNames": true,
|
|
27
|
+
"noFallthroughCasesInSwitch": true,
|
|
28
|
+
"isolatedModules": false,
|
|
29
|
+
}
|
|
30
|
+
}
|