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.
Files changed (59) hide show
  1. package/README.md +205 -0
  2. package/dist/BaseFormatter.d.ts +6 -0
  3. package/dist/BaseFormatter.js +28 -0
  4. package/dist/BaseFormatter.js.map +1 -0
  5. package/dist/FormatterFull.d.ts +6 -0
  6. package/dist/FormatterFull.js +33 -0
  7. package/dist/FormatterFull.js.map +1 -0
  8. package/dist/FormatterShort.d.ts +6 -0
  9. package/dist/FormatterShort.js +26 -0
  10. package/dist/FormatterShort.js.map +1 -0
  11. package/dist/IFormatter.d.ts +4 -0
  12. package/dist/IFormatter.js +3 -0
  13. package/dist/IFormatter.js.map +1 -0
  14. package/dist/ILogger.d.ts +15 -0
  15. package/dist/ILogger.js +3 -0
  16. package/dist/ILogger.js.map +1 -0
  17. package/dist/IStream.d.ts +4 -0
  18. package/dist/IStream.js +3 -0
  19. package/dist/IStream.js.map +1 -0
  20. package/dist/Log.d.ts +9 -0
  21. package/dist/Log.js +14 -0
  22. package/dist/Log.js.map +1 -0
  23. package/dist/LogLevel.d.ts +10 -0
  24. package/dist/LogLevel.js +15 -0
  25. package/dist/LogLevel.js.map +1 -0
  26. package/dist/Logger.d.ts +26 -0
  27. package/dist/Logger.js +108 -0
  28. package/dist/Logger.js.map +1 -0
  29. package/dist/NamirasoftLogServer.d.ts +2 -0
  30. package/dist/NamirasoftLogServer.js +7 -0
  31. package/dist/NamirasoftLogServer.js.map +1 -0
  32. package/dist/StreamConsole.d.ts +5 -0
  33. package/dist/StreamConsole.js +41 -0
  34. package/dist/StreamConsole.js.map +1 -0
  35. package/dist/StreamFile.d.ts +13 -0
  36. package/dist/StreamFile.js +79 -0
  37. package/dist/StreamFile.js.map +1 -0
  38. package/dist/StreamNamirasoftLog.d.ts +7 -0
  39. package/dist/StreamNamirasoftLog.js +23 -0
  40. package/dist/StreamNamirasoftLog.js.map +1 -0
  41. package/dist/index.d.ts +13 -0
  42. package/dist/index.js +30 -0
  43. package/dist/index.js.map +1 -0
  44. package/package.json +13 -0
  45. package/src/BaseFormatter.ts +28 -0
  46. package/src/FormatterFull.ts +22 -0
  47. package/src/FormatterShort.ts +15 -0
  48. package/src/IFormatter.ts +6 -0
  49. package/src/ILogger.ts +17 -0
  50. package/src/IStream.ts +5 -0
  51. package/src/Log.ts +18 -0
  52. package/src/LogLevel.ts +11 -0
  53. package/src/Logger.ts +89 -0
  54. package/src/NamirasoftLogServer.ts +3 -0
  55. package/src/StreamConsole.ts +31 -0
  56. package/src/StreamFile.ts +52 -0
  57. package/src/StreamNamirasoftLog.ts +14 -0
  58. package/src/index.ts +13 -0
  59. 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,7 @@
1
+ import { IStream } from "./IStream";
2
+ import { Log } from "./Log";
3
+ export declare class StreamNamirasoftLog implements IStream {
4
+ token: string;
5
+ constructor(token: string);
6
+ write(_: Log, __: string[]): Promise<void>;
7
+ }
@@ -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"}
@@ -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
+ }
@@ -0,0 +1,6 @@
1
+ import { Log } from "./Log";
2
+
3
+ export interface IFormatter
4
+ {
5
+ format(log: Log): Promise<string[]>;
6
+ }
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
@@ -0,0 +1,5 @@
1
+ import { Log } from "./Log";
2
+ export interface IStream
3
+ {
4
+ write(log: Log, formated: string[]): Promise<void>;
5
+ }
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
+ }
@@ -0,0 +1,11 @@
1
+ export enum LogLevel
2
+ {
3
+ "Trace",
4
+ "Verbose",
5
+ "Debug",
6
+ "Info",
7
+ "Warning",
8
+ "Error",
9
+ "Critical",
10
+ "Fatal"
11
+ }
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,3 @@
1
+ export class NamirasoftLogServer
2
+ {
3
+ }
@@ -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
+ }