@nx-ddd/logging 19.24.1
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/base/index.d.ts +147 -0
- package/base/index.d.ts.map +1 -0
- package/console/index.d.ts +26 -0
- package/console/index.d.ts.map +1 -0
- package/fesm2022/nx-ddd-logging-base.mjs +122 -0
- package/fesm2022/nx-ddd-logging-base.mjs.map +1 -0
- package/fesm2022/nx-ddd-logging-console.mjs +44 -0
- package/fesm2022/nx-ddd-logging-console.mjs.map +1 -0
- package/fesm2022/nx-ddd-logging-file.mjs +106 -0
- package/fesm2022/nx-ddd-logging-file.mjs.map +1 -0
- package/fesm2022/nx-ddd-logging-tee.mjs +61 -0
- package/fesm2022/nx-ddd-logging-tee.mjs.map +1 -0
- package/fesm2022/nx-ddd-logging.mjs +210 -0
- package/fesm2022/nx-ddd-logging.mjs.map +1 -0
- package/file/index.d.ts +42 -0
- package/file/index.d.ts.map +1 -0
- package/index.d.ts +181 -0
- package/index.d.ts.map +1 -0
- package/package.json +39 -0
- package/tee/index.d.ts +29 -0
- package/tee/index.d.ts.map +1 -0
package/base/index.d.ts
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Provider } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* LoggingService interfaces
|
|
6
|
+
*
|
|
7
|
+
* Provides structured logging with different log levels and file output
|
|
8
|
+
*/
|
|
9
|
+
declare enum LogLevel {
|
|
10
|
+
DEBUG = 0,
|
|
11
|
+
INFO = 1,
|
|
12
|
+
WARN = 2,
|
|
13
|
+
ERROR = 3,
|
|
14
|
+
FATAL = 4
|
|
15
|
+
}
|
|
16
|
+
interface LogContext {
|
|
17
|
+
component?: string;
|
|
18
|
+
sessionId?: string;
|
|
19
|
+
clientId?: string;
|
|
20
|
+
[key: string]: any;
|
|
21
|
+
}
|
|
22
|
+
interface ILoggingService {
|
|
23
|
+
/**
|
|
24
|
+
* Log debug message (for development/troubleshooting)
|
|
25
|
+
*/
|
|
26
|
+
debug(message: string, context?: LogContext): void;
|
|
27
|
+
/**
|
|
28
|
+
* Log informational message
|
|
29
|
+
*/
|
|
30
|
+
info(message: string, context?: LogContext): void;
|
|
31
|
+
/**
|
|
32
|
+
* Log warning message
|
|
33
|
+
*/
|
|
34
|
+
warn(message: string, context?: LogContext): void;
|
|
35
|
+
/**
|
|
36
|
+
* Log error message
|
|
37
|
+
*/
|
|
38
|
+
error(message: string, error?: Error, context?: LogContext): void;
|
|
39
|
+
/**
|
|
40
|
+
* Log fatal error message (application cannot continue)
|
|
41
|
+
*/
|
|
42
|
+
fatal(message: string, error?: Error, context?: LogContext): void;
|
|
43
|
+
/**
|
|
44
|
+
* Set log level filter
|
|
45
|
+
*/
|
|
46
|
+
setLogLevel(level: LogLevel): void;
|
|
47
|
+
/**
|
|
48
|
+
* Set component name for this logger
|
|
49
|
+
*/
|
|
50
|
+
setComponent(component: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Close logger and flush buffers
|
|
53
|
+
*/
|
|
54
|
+
close(): void;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Base Logger class for multi-provider logging system
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
declare const LOGGER: InjectionToken<BaseLogger>;
|
|
62
|
+
declare abstract class BaseLogger {
|
|
63
|
+
/**
|
|
64
|
+
* Main log method that all loggers must implement
|
|
65
|
+
*/
|
|
66
|
+
abstract log(level: LogLevel, message: string, context?: LogContext, error?: Error): void;
|
|
67
|
+
/**
|
|
68
|
+
* Close logger and flush buffers
|
|
69
|
+
*/
|
|
70
|
+
abstract close(): void;
|
|
71
|
+
debug(message: string, context?: LogContext): void;
|
|
72
|
+
info(message: string, context?: LogContext): void;
|
|
73
|
+
warn(message: string, context?: LogContext): void;
|
|
74
|
+
error(message: string, error?: Error, context?: LogContext): void;
|
|
75
|
+
fatal(message: string, error?: Error, context?: LogContext): void;
|
|
76
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseLogger, never>;
|
|
77
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<BaseLogger>;
|
|
78
|
+
}
|
|
79
|
+
declare function provideLogger(useFactory: () => BaseLogger): Provider;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* LogFilter - Simple function-based log filtering
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Log filter function type
|
|
87
|
+
* @param level - The log level
|
|
88
|
+
* @param context - Optional log context (component name, etc.)
|
|
89
|
+
* @returns true if the log should be output, false to suppress
|
|
90
|
+
*/
|
|
91
|
+
type LogFilterFn = (level: LogLevel, context?: LogContext) => boolean;
|
|
92
|
+
declare const LOG_FILTER: InjectionToken<LogFilterFn>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Provider functions for log filtering
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Provide a log filter function
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* // Filter by log level
|
|
103
|
+
* provideLogFilter((level) => level >= LogLevel.WARN)
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* // Filter by component
|
|
107
|
+
* provideLogFilter((level, context) => context?.component?.startsWith('My'))
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* // Allow all logs
|
|
111
|
+
* provideLogFilter(() => true)
|
|
112
|
+
*/
|
|
113
|
+
declare function provideLogFilter(filter: LogFilterFn): Provider;
|
|
114
|
+
/**
|
|
115
|
+
* Configuration for log filtering
|
|
116
|
+
*/
|
|
117
|
+
interface LogFilterConfig {
|
|
118
|
+
minLevel?: LogLevel;
|
|
119
|
+
componentPattern?: string;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Provide a log filter with explicit configuration
|
|
123
|
+
* @param config - Filter configuration (minLevel defaults to WARN)
|
|
124
|
+
*/
|
|
125
|
+
declare function provideLogFilterWithConfig(config?: LogFilterConfig): Provider;
|
|
126
|
+
/**
|
|
127
|
+
* @deprecated Use provideLogFilterWithConfig() instead.
|
|
128
|
+
* This function directly accesses process.env which violates the rule
|
|
129
|
+
* that packages should not access environment variables directly.
|
|
130
|
+
*
|
|
131
|
+
* Migration example:
|
|
132
|
+
* ```typescript
|
|
133
|
+
* // Before (in packages)
|
|
134
|
+
* provideLogFilterFromEnv()
|
|
135
|
+
*
|
|
136
|
+
* // After (in application layer)
|
|
137
|
+
* provideLogFilterWithConfig({
|
|
138
|
+
* minLevel: process.env['LOG_LEVEL'] ? LogLevel[process.env['LOG_LEVEL'].toUpperCase()] : undefined,
|
|
139
|
+
* componentPattern: process.env['LOG_COMPONENTS']
|
|
140
|
+
* })
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
declare function provideLogFilterFromEnv(): Provider;
|
|
144
|
+
|
|
145
|
+
export { BaseLogger, LOGGER, LOG_FILTER, LogLevel, provideLogFilter, provideLogFilterFromEnv, provideLogFilterWithConfig, provideLogger };
|
|
146
|
+
export type { ILoggingService, LogContext, LogFilterConfig, LogFilterFn };
|
|
147
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../../../../packages/@nx-ddd/logging/src/lib/base/interfaces.ts","../../../../../packages/@nx-ddd/logging/src/lib/base/base.logger.ts","../../../../../packages/@nx-ddd/logging/src/lib/base/log-filter.ts","../../../../../packages/@nx-ddd/logging/src/lib/base/providers.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":";;;AAAA;;;;AAIG;AAEH;AACE;AACA;AACA;AACA;AACA;AACD;;;;;AAMC;AACD;;AAGC;;AAEG;;AAGH;;AAEG;;AAGH;;AAEG;;AAGH;;AAEG;AACH;AAEA;;AAEG;AACH;AAEA;;AAEG;AACH;AAEA;;AAEG;AACH;AAEA;;AAEG;;AAEJ;;AC7DD;;AAEG;;AAKH;AAEA;AAEE;;AAEG;;AAQH;;AAEG;;;;;AAgBH;AAIA;;;AAGD;AAED;;AChDA;;AAEG;;AAKH;;;;;AAKG;AACG;AAEN;;ACfA;;AAEG;;AAMH;;;;;;;;;;;;;;AAcG;AACH;AAIA;;AAEG;;;;AAIF;AAED;;;AAGG;AACH;AAaA;;;;;;;;;;;;;;;;AAgBG;AACH;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Provider } from '@angular/core';
|
|
2
|
+
import { LogLevel, BaseLogger, LogContext } from '@nx-ddd/logging/base';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* ConsoleLogger implementation for multi-provider logging
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
interface ConsoleLoggerOptions {
|
|
9
|
+
minLevel?: LogLevel;
|
|
10
|
+
componentFilter?: string;
|
|
11
|
+
}
|
|
12
|
+
declare class ConsoleLogger extends BaseLogger {
|
|
13
|
+
private readonly minLevel;
|
|
14
|
+
constructor(options?: ConsoleLoggerOptions);
|
|
15
|
+
log(level: LogLevel, message: string, context?: LogContext, error?: Error): void;
|
|
16
|
+
close(): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Provide ConsoleLogger with optional configuration
|
|
20
|
+
* @param options - Logger options (minLevel defaults to WARN if not specified)
|
|
21
|
+
*/
|
|
22
|
+
declare function provideConsoleLogger(options?: ConsoleLoggerOptions): Provider;
|
|
23
|
+
|
|
24
|
+
export { ConsoleLogger, provideConsoleLogger };
|
|
25
|
+
export type { ConsoleLoggerOptions };
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../../../../packages/@nx-ddd/logging/src/lib/console/console.logger.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;AAEG;;;;;AAQF;AAED;AACE;;AAOA;AASA;AAGD;AAED;;;AAGG;AACH;;;"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Injectable } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* LoggingService interfaces
|
|
6
|
+
*
|
|
7
|
+
* Provides structured logging with different log levels and file output
|
|
8
|
+
*/
|
|
9
|
+
var LogLevel;
|
|
10
|
+
(function (LogLevel) {
|
|
11
|
+
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
12
|
+
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
13
|
+
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
|
14
|
+
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
|
15
|
+
LogLevel[LogLevel["FATAL"] = 4] = "FATAL";
|
|
16
|
+
})(LogLevel || (LogLevel = {}));
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Base Logger class for multi-provider logging system
|
|
20
|
+
*/
|
|
21
|
+
const LOGGER = new InjectionToken('Logger');
|
|
22
|
+
class BaseLogger {
|
|
23
|
+
// Convenience methods
|
|
24
|
+
debug(message, context) {
|
|
25
|
+
this.log(LogLevel.DEBUG, message, context);
|
|
26
|
+
}
|
|
27
|
+
info(message, context) {
|
|
28
|
+
this.log(LogLevel.INFO, message, context);
|
|
29
|
+
}
|
|
30
|
+
warn(message, context) {
|
|
31
|
+
this.log(LogLevel.WARN, message, context);
|
|
32
|
+
}
|
|
33
|
+
error(message, error, context) {
|
|
34
|
+
this.log(LogLevel.ERROR, message, context, error);
|
|
35
|
+
}
|
|
36
|
+
fatal(message, error, context) {
|
|
37
|
+
this.log(LogLevel.FATAL, message, context, error);
|
|
38
|
+
}
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: BaseLogger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
40
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: BaseLogger });
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: BaseLogger, decorators: [{
|
|
43
|
+
type: Injectable
|
|
44
|
+
}] });
|
|
45
|
+
function provideLogger(useFactory) {
|
|
46
|
+
return {
|
|
47
|
+
provide: LOGGER,
|
|
48
|
+
multi: true,
|
|
49
|
+
useFactory,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* LogFilter - Simple function-based log filtering
|
|
55
|
+
*/
|
|
56
|
+
const LOG_FILTER = new InjectionToken('LogFilter');
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Provider functions for log filtering
|
|
60
|
+
*/
|
|
61
|
+
/**
|
|
62
|
+
* Provide a log filter function
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* // Filter by log level
|
|
66
|
+
* provideLogFilter((level) => level >= LogLevel.WARN)
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* // Filter by component
|
|
70
|
+
* provideLogFilter((level, context) => context?.component?.startsWith('My'))
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* // Allow all logs
|
|
74
|
+
* provideLogFilter(() => true)
|
|
75
|
+
*/
|
|
76
|
+
function provideLogFilter(filter) {
|
|
77
|
+
return { provide: LOG_FILTER, useValue: filter };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Provide a log filter with explicit configuration
|
|
81
|
+
* @param config - Filter configuration (minLevel defaults to WARN)
|
|
82
|
+
*/
|
|
83
|
+
function provideLogFilterWithConfig(config) {
|
|
84
|
+
const minLevel = config?.minLevel ?? LogLevel.WARN;
|
|
85
|
+
const componentRegex = config?.componentPattern ? new RegExp(config.componentPattern) : null;
|
|
86
|
+
return provideLogFilter((level, context) => {
|
|
87
|
+
if (level < minLevel)
|
|
88
|
+
return false;
|
|
89
|
+
if (componentRegex && context?.component && !componentRegex.test(context.component)) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* @deprecated Use provideLogFilterWithConfig() instead.
|
|
97
|
+
* This function directly accesses process.env which violates the rule
|
|
98
|
+
* that packages should not access environment variables directly.
|
|
99
|
+
*
|
|
100
|
+
* Migration example:
|
|
101
|
+
* ```typescript
|
|
102
|
+
* // Before (in packages)
|
|
103
|
+
* provideLogFilterFromEnv()
|
|
104
|
+
*
|
|
105
|
+
* // After (in application layer)
|
|
106
|
+
* provideLogFilterWithConfig({
|
|
107
|
+
* minLevel: process.env['LOG_LEVEL'] ? LogLevel[process.env['LOG_LEVEL'].toUpperCase()] : undefined,
|
|
108
|
+
* componentPattern: process.env['LOG_COMPONENTS']
|
|
109
|
+
* })
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
function provideLogFilterFromEnv() {
|
|
113
|
+
console.warn('[DEPRECATED] provideLogFilterFromEnv() is deprecated. Use provideLogFilterWithConfig() instead.');
|
|
114
|
+
return provideLogFilterWithConfig();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Generated bundle index. Do not edit.
|
|
119
|
+
*/
|
|
120
|
+
|
|
121
|
+
export { BaseLogger, LOGGER, LOG_FILTER, LogLevel, provideLogFilter, provideLogFilterFromEnv, provideLogFilterWithConfig, provideLogger };
|
|
122
|
+
//# sourceMappingURL=nx-ddd-logging-base.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nx-ddd-logging-base.mjs","sources":["../tmp-esm2022/base/interfaces.js","../tmp-esm2022/base/base.logger.js","../tmp-esm2022/base/log-filter.js","../tmp-esm2022/base/providers.js","../tmp-esm2022/base/nx-ddd-logging-base.js"],"sourcesContent":["/**\n * LoggingService interfaces\n *\n * Provides structured logging with different log levels and file output\n */\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n LogLevel[LogLevel[\"FATAL\"] = 4] = \"FATAL\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvbG9nZ2luZy9zcmMvbGliL2Jhc2UvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsTUFBTSxDQUFOLElBQVksUUFNWDtBQU5ELFdBQVksUUFBUTtJQUNsQix5Q0FBUyxDQUFBO0lBQ1QsdUNBQVEsQ0FBQTtJQUNSLHVDQUFRLENBQUE7SUFDUix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNYLENBQUMsRUFOVyxRQUFRLEtBQVIsUUFBUSxRQU1uQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTG9nZ2luZ1NlcnZpY2UgaW50ZXJmYWNlc1xuICpcbiAqIFByb3ZpZGVzIHN0cnVjdHVyZWQgbG9nZ2luZyB3aXRoIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCBmaWxlIG91dHB1dFxuICovXG5cbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcbiAgREVCVUcgPSAwLFxuICBJTkZPID0gMSxcbiAgV0FSTiA9IDIsXG4gIEVSUk9SID0gMyxcbiAgRkFUQUwgPSA0LFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbnRleHQge1xuICBjb21wb25lbnQ/OiBzdHJpbmc7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2luZ1NlcnZpY2Uge1xuICAvKipcbiAgICogTG9nIGRlYnVnIG1lc3NhZ2UgKGZvciBkZXZlbG9wbWVudC90cm91Ymxlc2hvb3RpbmcpXG4gICAqL1xuICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogTG9nIGluZm9ybWF0aW9uYWwgbWVzc2FnZVxuICAgKi9cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogTG9nIHdhcm5pbmcgbWVzc2FnZVxuICAgKi9cbiAgd2FybihtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogTG9nIGVycm9yIG1lc3NhZ2VcbiAgICovXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiBFcnJvciwgY29udGV4dD86IExvZ0NvbnRleHQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBMb2cgZmF0YWwgZXJyb3IgbWVzc2FnZSAoYXBwbGljYXRpb24gY2Fubm90IGNvbnRpbnVlKVxuICAgKi9cbiAgZmF0YWwobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IEVycm9yLCBjb250ZXh0PzogTG9nQ29udGV4dCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldCBsb2cgbGV2ZWwgZmlsdGVyXG4gICAqL1xuICBzZXRMb2dMZXZlbChsZXZlbDogTG9nTGV2ZWwpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXQgY29tcG9uZW50IG5hbWUgZm9yIHRoaXMgbG9nZ2VyXG4gICAqL1xuICBzZXRDb21wb25lbnQoY29tcG9uZW50OiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDbG9zZSBsb2dnZXIgYW5kIGZsdXNoIGJ1ZmZlcnNcbiAgICovXG4gIGNsb3NlKCk6IHZvaWQ7XG59XG4iXX0=","/**\n * Base Logger class for multi-provider logging system\n */\nimport { Injectable, InjectionToken } from '@angular/core';\nimport { LogLevel } from './interfaces';\nimport * as i0 from \"@angular/core\";\nexport const LOGGER = new InjectionToken('Logger');\nexport class BaseLogger {\n // Convenience methods\n debug(message, context) {\n this.log(LogLevel.DEBUG, message, context);\n }\n info(message, context) {\n this.log(LogLevel.INFO, message, context);\n }\n warn(message, context) {\n this.log(LogLevel.WARN, message, context);\n }\n error(message, error, context) {\n this.log(LogLevel.ERROR, message, context, error);\n }\n fatal(message, error, context) {\n this.log(LogLevel.FATAL, message, context, error);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: BaseLogger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: BaseLogger });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: BaseLogger, decorators: [{\n type: Injectable\n }] });\nexport function provideLogger(useFactory) {\n return {\n provide: LOGGER,\n multi: true,\n useFactory,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2xvZ2dpbmcvc3JjL2xpYi9iYXNlL2Jhc2UubG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFFBQVEsRUFBYyxNQUFNLGNBQWMsQ0FBQzs7QUFFcEQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBYyxDQUFhLFFBQVEsQ0FBQyxDQUFDO0FBRy9ELE1BQU0sT0FBZ0IsVUFBVTtJQWdCOUIsc0JBQXNCO0lBQ3RCLEtBQUssQ0FBQyxPQUFlLEVBQUUsT0FBb0I7UUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFvQjtRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBZSxFQUFFLE9BQW9CO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFlLEVBQUUsS0FBYSxFQUFFLE9BQW9CO1FBQ3hELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBZSxFQUFFLEtBQWEsRUFBRSxPQUFvQjtRQUN4RCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO3VHQW5DbUIsVUFBVTsyR0FBVixVQUFVOzsyRkFBVixVQUFVO2tCQUQvQixVQUFVOztBQXVDWCxNQUFNLFVBQVUsYUFBYSxDQUFDLFVBQTRCO0lBQ3hELE9BQU87UUFDTCxPQUFPLEVBQUUsTUFBTTtRQUNmLEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVTtLQUNYLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCYXNlIExvZ2dlciBjbGFzcyBmb3IgbXVsdGktcHJvdmlkZXIgbG9nZ2luZyBzeXN0ZW1cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ0xldmVsLCBMb2dDb250ZXh0IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IExPR0dFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCYXNlTG9nZ2VyPignTG9nZ2VyJyk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTG9nZ2VyIHtcbiAgLyoqXG4gICAqIE1haW4gbG9nIG1ldGhvZCB0aGF0IGFsbCBsb2dnZXJzIG11c3QgaW1wbGVtZW50XG4gICAqL1xuICBhYnN0cmFjdCBsb2coXG4gICAgbGV2ZWw6IExvZ0xldmVsLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBjb250ZXh0PzogTG9nQ29udGV4dCxcbiAgICBlcnJvcj86IEVycm9yXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENsb3NlIGxvZ2dlciBhbmQgZmx1c2ggYnVmZmVyc1xuICAgKi9cbiAgYWJzdHJhY3QgY2xvc2UoKTogdm9pZDtcblxuICAvLyBDb252ZW5pZW5jZSBtZXRob2RzXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IExvZ0NvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5ERUJVRywgbWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IExvZ0NvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5JTkZPLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogTG9nQ29udGV4dCk6IHZvaWQge1xuICAgIHRoaXMubG9nKExvZ0xldmVsLldBUk4sIG1lc3NhZ2UsIGNvbnRleHQpO1xuICB9XG5cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IEVycm9yLCBjb250ZXh0PzogTG9nQ29udGV4dCk6IHZvaWQge1xuICAgIHRoaXMubG9nKExvZ0xldmVsLkVSUk9SLCBtZXNzYWdlLCBjb250ZXh0LCBlcnJvcik7XG4gIH1cblxuICBmYXRhbChtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogRXJyb3IsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5sb2coTG9nTGV2ZWwuRkFUQUwsIG1lc3NhZ2UsIGNvbnRleHQsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUxvZ2dlcih1c2VGYWN0b3J5OiAoKSA9PiBCYXNlTG9nZ2VyKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IExPR0dFUixcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICB1c2VGYWN0b3J5LFxuICB9O1xufVxuIl19","/**\n * LogFilter - Simple function-based log filtering\n */\nimport { InjectionToken } from '@angular/core';\nexport const LOG_FILTER = new InjectionToken('LogFilter');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvbG9nZ2luZy9zcmMvbGliL2Jhc2UvbG9nLWZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFXL0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxDQUFjLFdBQVcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMb2dGaWx0ZXIgLSBTaW1wbGUgZnVuY3Rpb24tYmFzZWQgbG9nIGZpbHRlcmluZ1xuICovXG5cbmltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dMZXZlbCwgTG9nQ29udGV4dCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogTG9nIGZpbHRlciBmdW5jdGlvbiB0eXBlXG4gKiBAcGFyYW0gbGV2ZWwgLSBUaGUgbG9nIGxldmVsXG4gKiBAcGFyYW0gY29udGV4dCAtIE9wdGlvbmFsIGxvZyBjb250ZXh0IChjb21wb25lbnQgbmFtZSwgZXRjLilcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGxvZyBzaG91bGQgYmUgb3V0cHV0LCBmYWxzZSB0byBzdXBwcmVzc1xuICovXG5leHBvcnQgdHlwZSBMb2dGaWx0ZXJGbiA9IChsZXZlbDogTG9nTGV2ZWwsIGNvbnRleHQ/OiBMb2dDb250ZXh0KSA9PiBib29sZWFuO1xuXG5leHBvcnQgY29uc3QgTE9HX0ZJTFRFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2dGaWx0ZXJGbj4oJ0xvZ0ZpbHRlcicpO1xuIl19","/**\n * Provider functions for log filtering\n */\nimport { LogLevel } from './interfaces';\nimport { LOG_FILTER } from './log-filter';\n/**\n * Provide a log filter function\n *\n * @example\n * // Filter by log level\n * provideLogFilter((level) => level >= LogLevel.WARN)\n *\n * @example\n * // Filter by component\n * provideLogFilter((level, context) => context?.component?.startsWith('My'))\n *\n * @example\n * // Allow all logs\n * provideLogFilter(() => true)\n */\nexport function provideLogFilter(filter) {\n return { provide: LOG_FILTER, useValue: filter };\n}\n/**\n * Provide a log filter with explicit configuration\n * @param config - Filter configuration (minLevel defaults to WARN)\n */\nexport function provideLogFilterWithConfig(config) {\n const minLevel = config?.minLevel ?? LogLevel.WARN;\n const componentRegex = config?.componentPattern ? new RegExp(config.componentPattern) : null;\n return provideLogFilter((level, context) => {\n if (level < minLevel)\n return false;\n if (componentRegex && context?.component && !componentRegex.test(context.component)) {\n return false;\n }\n return true;\n });\n}\n/**\n * @deprecated Use provideLogFilterWithConfig() instead.\n * This function directly accesses process.env which violates the rule\n * that packages should not access environment variables directly.\n *\n * Migration example:\n * ```typescript\n * // Before (in packages)\n * provideLogFilterFromEnv()\n *\n * // After (in application layer)\n * provideLogFilterWithConfig({\n * minLevel: process.env['LOG_LEVEL'] ? LogLevel[process.env['LOG_LEVEL'].toUpperCase()] : undefined,\n * componentPattern: process.env['LOG_COMPONENTS']\n * })\n * ```\n */\nexport function provideLogFilterFromEnv() {\n console.warn('[DEPRECATED] provideLogFilterFromEnv() is deprecated. Use provideLogFilterWithConfig() instead.');\n return provideLogFilterWithConfig();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9sb2dnaW5nL3NyYy9saWIvYmFzZS9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFHSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQWUsTUFBTSxjQUFjLENBQUM7QUFFdkQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBbUI7SUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ25ELENBQUM7QUFVRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUFBd0I7SUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ25ELE1BQU0sY0FBYyxHQUFHLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUU3RixPQUFPLGdCQUFnQixDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3pDLElBQUksS0FBSyxHQUFHLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuQyxJQUFJLGNBQWMsSUFBSSxPQUFPLEVBQUUsU0FBUyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QjtJQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7SUFDaEgsT0FBTywwQkFBMEIsRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3ZpZGVyIGZ1bmN0aW9ucyBmb3IgbG9nIGZpbHRlcmluZ1xuICovXG5cbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dfRklMVEVSLCBMb2dGaWx0ZXJGbiB9IGZyb20gJy4vbG9nLWZpbHRlcic7XG5cbi8qKlxuICogUHJvdmlkZSBhIGxvZyBmaWx0ZXIgZnVuY3Rpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRmlsdGVyIGJ5IGxvZyBsZXZlbFxuICogcHJvdmlkZUxvZ0ZpbHRlcigobGV2ZWwpID0+IGxldmVsID49IExvZ0xldmVsLldBUk4pXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZpbHRlciBieSBjb21wb25lbnRcbiAqIHByb3ZpZGVMb2dGaWx0ZXIoKGxldmVsLCBjb250ZXh0KSA9PiBjb250ZXh0Py5jb21wb25lbnQ/LnN0YXJ0c1dpdGgoJ015JykpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFsbG93IGFsbCBsb2dzXG4gKiBwcm92aWRlTG9nRmlsdGVyKCgpID0+IHRydWUpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTG9nRmlsdGVyKGZpbHRlcjogTG9nRmlsdGVyRm4pOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IExPR19GSUxURVIsIHVzZVZhbHVlOiBmaWx0ZXIgfTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBsb2cgZmlsdGVyaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRmlsdGVyQ29uZmlnIHtcbiAgbWluTGV2ZWw/OiBMb2dMZXZlbDtcbiAgY29tcG9uZW50UGF0dGVybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm92aWRlIGEgbG9nIGZpbHRlciB3aXRoIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBjb25maWcgLSBGaWx0ZXIgY29uZmlndXJhdGlvbiAobWluTGV2ZWwgZGVmYXVsdHMgdG8gV0FSTilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVMb2dGaWx0ZXJXaXRoQ29uZmlnKGNvbmZpZz86IExvZ0ZpbHRlckNvbmZpZyk6IFByb3ZpZGVyIHtcbiAgY29uc3QgbWluTGV2ZWwgPSBjb25maWc/Lm1pbkxldmVsID8/IExvZ0xldmVsLldBUk47XG4gIGNvbnN0IGNvbXBvbmVudFJlZ2V4ID0gY29uZmlnPy5jb21wb25lbnRQYXR0ZXJuID8gbmV3IFJlZ0V4cChjb25maWcuY29tcG9uZW50UGF0dGVybikgOiBudWxsO1xuXG4gIHJldHVybiBwcm92aWRlTG9nRmlsdGVyKChsZXZlbCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChsZXZlbCA8IG1pbkxldmVsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNvbXBvbmVudFJlZ2V4ICYmIGNvbnRleHQ/LmNvbXBvbmVudCAmJiAhY29tcG9uZW50UmVnZXgudGVzdChjb250ZXh0LmNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm92aWRlTG9nRmlsdGVyV2l0aENvbmZpZygpIGluc3RlYWQuXG4gKiBUaGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGFjY2Vzc2VzIHByb2Nlc3MuZW52IHdoaWNoIHZpb2xhdGVzIHRoZSBydWxlXG4gKiB0aGF0IHBhY2thZ2VzIHNob3VsZCBub3QgYWNjZXNzIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseS5cbiAqXG4gKiBNaWdyYXRpb24gZXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEJlZm9yZSAoaW4gcGFja2FnZXMpXG4gKiBwcm92aWRlTG9nRmlsdGVyRnJvbUVudigpXG4gKlxuICogLy8gQWZ0ZXIgKGluIGFwcGxpY2F0aW9uIGxheWVyKVxuICogcHJvdmlkZUxvZ0ZpbHRlcldpdGhDb25maWcoe1xuICogICBtaW5MZXZlbDogcHJvY2Vzcy5lbnZbJ0xPR19MRVZFTCddID8gTG9nTGV2ZWxbcHJvY2Vzcy5lbnZbJ0xPR19MRVZFTCddLnRvVXBwZXJDYXNlKCldIDogdW5kZWZpbmVkLFxuICogICBjb21wb25lbnRQYXR0ZXJuOiBwcm9jZXNzLmVudlsnTE9HX0NPTVBPTkVOVFMnXVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUxvZ0ZpbHRlckZyb21FbnYoKTogUHJvdmlkZXIge1xuICBjb25zb2xlLndhcm4oJ1tERVBSRUNBVEVEXSBwcm92aWRlTG9nRmlsdGVyRnJvbUVudigpIGlzIGRlcHJlY2F0ZWQuIFVzZSBwcm92aWRlTG9nRmlsdGVyV2l0aENvbmZpZygpIGluc3RlYWQuJyk7XG4gIHJldHVybiBwcm92aWRlTG9nRmlsdGVyV2l0aENvbmZpZygpO1xufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWxvZ2dpbmctYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvbG9nZ2luZy9zcmMvbGliL2Jhc2UvbngtZGRkLWxvZ2dpbmctYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACU,IAAC;AACX,CAAC,UAAU,QAAQ,EAAE;AACrB,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AAC7C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AAC7C,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;AAC7C,CAAC,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,CAAC,CAAC;;ACZ/B;AACA;AACA;AAIY,MAAC,MAAM,GAAG,IAAI,cAAc,CAAC,QAAQ;AAC1C,MAAM,UAAU,CAAC;AACxB;AACA,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;AAC5B,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;AAClD,IAAI;AACJ,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AAC3B,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI;AACJ,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AAC3B,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;AACjD,IAAI;AACJ,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AACnC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AACzD,IAAI;AACJ,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AACnC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AACzD,IAAI;AACJ,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AACrK,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACxH;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AACpH,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC,EAAE,CAAC;AACN,SAAS,aAAa,CAAC,UAAU,EAAE;AAC1C,IAAI,OAAO;AACX,QAAQ,OAAO,EAAE,MAAM;AACvB,QAAQ,KAAK,EAAE,IAAI;AACnB,QAAQ,UAAU;AAClB,KAAK;AACL;;ACpCA;AACA;AACA;AAEY,MAAC,UAAU,GAAG,IAAI,cAAc,CAAC,WAAW;;ACJxD;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,gBAAgB,CAAC,MAAM,EAAE;AACzC,IAAI,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;AACpD;AACA;AACA;AACA;AACA;AACO,SAAS,0BAA0B,CAAC,MAAM,EAAE;AACnD,IAAI,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC,IAAI;AACtD,IAAI,MAAM,cAAc,GAAG,MAAM,EAAE,gBAAgB,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI;AAChG,IAAI,OAAO,gBAAgB,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK;AAChD,QAAQ,IAAI,KAAK,GAAG,QAAQ;AAC5B,YAAY,OAAO,KAAK;AACxB,QAAQ,IAAI,cAAc,IAAI,OAAO,EAAE,SAAS,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC7F,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI,CAAC,CAAC;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,GAAG;AAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,iGAAiG,CAAC;AACnH,IAAI,OAAO,0BAA0B,EAAE;AACvC;;AC3DA;AACA;AACA;;;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BaseLogger, LogLevel, LOGGER } from '@nx-ddd/logging/base';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ConsoleLogger implementation for multi-provider logging
|
|
5
|
+
*/
|
|
6
|
+
class ConsoleLogger extends BaseLogger {
|
|
7
|
+
minLevel;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
super();
|
|
10
|
+
this.minLevel = options?.minLevel ?? LogLevel.WARN;
|
|
11
|
+
}
|
|
12
|
+
log(level, message, context, error) {
|
|
13
|
+
// Filter by log level - only output logs at or above minLevel
|
|
14
|
+
if (level < this.minLevel)
|
|
15
|
+
return;
|
|
16
|
+
const args = [`[${LogLevel[level]}] ${message}`];
|
|
17
|
+
if (context != null)
|
|
18
|
+
args.push(context);
|
|
19
|
+
if (error != null)
|
|
20
|
+
args.push(error);
|
|
21
|
+
console.log(...args);
|
|
22
|
+
}
|
|
23
|
+
close() {
|
|
24
|
+
// Nothing to close for console
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Provide ConsoleLogger with optional configuration
|
|
29
|
+
* @param options - Logger options (minLevel defaults to WARN if not specified)
|
|
30
|
+
*/
|
|
31
|
+
function provideConsoleLogger(options) {
|
|
32
|
+
return {
|
|
33
|
+
provide: LOGGER,
|
|
34
|
+
multi: true,
|
|
35
|
+
useFactory: () => new ConsoleLogger(options)
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Generated bundle index. Do not edit.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
export { ConsoleLogger, provideConsoleLogger };
|
|
44
|
+
//# sourceMappingURL=nx-ddd-logging-console.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nx-ddd-logging-console.mjs","sources":["../tmp-esm2022/console/console.logger.js","../tmp-esm2022/console/nx-ddd-logging-console.js"],"sourcesContent":["/**\n * ConsoleLogger implementation for multi-provider logging\n */\nimport { BaseLogger, LogLevel, LOGGER } from '@nx-ddd/logging/base';\nexport class ConsoleLogger extends BaseLogger {\n minLevel;\n constructor(options) {\n super();\n this.minLevel = options?.minLevel ?? LogLevel.WARN;\n }\n log(level, message, context, error) {\n // Filter by log level - only output logs at or above minLevel\n if (level < this.minLevel)\n return;\n const args = [`[${LogLevel[level]}] ${message}`];\n if (context != null)\n args.push(context);\n if (error != null)\n args.push(error);\n console.log(...args);\n }\n close() {\n // Nothing to close for console\n }\n}\n/**\n * Provide ConsoleLogger with optional configuration\n * @param options - Logger options (minLevel defaults to WARN if not specified)\n */\nexport function provideConsoleLogger(options) {\n return {\n provide: LOGGER,\n multi: true,\n useFactory: () => new ConsoleLogger(options)\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc29sZS5sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2xvZ2dpbmcvc3JjL2xpYi9jb25zb2xlL2NvbnNvbGUubG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBR0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWMsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFPaEYsTUFBTSxPQUFPLGFBQWMsU0FBUSxVQUFVO0lBQzFCLFFBQVEsQ0FBVztJQUVwQyxZQUFZLE9BQThCO1FBQ3hDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELEdBQUcsQ0FBQyxLQUFlLEVBQUUsT0FBZSxFQUFFLE9BQW9CLEVBQUUsS0FBYTtRQUN2RSw4REFBOEQ7UUFDOUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ2xDLE1BQU0sSUFBSSxHQUFVLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sSUFBSSxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUs7UUFDSCwrQkFBK0I7SUFDakMsQ0FBQztDQUNGO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQThCO0lBQ2pFLE9BQU87UUFDTCxPQUFPLEVBQUUsTUFBTTtRQUNmLEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQztLQUM3QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uc29sZUxvZ2dlciBpbXBsZW1lbnRhdGlvbiBmb3IgbXVsdGktcHJvdmlkZXIgbG9nZ2luZ1xuICovXG5cbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlTG9nZ2VyLCBMb2dMZXZlbCwgTG9nQ29udGV4dCwgTE9HR0VSIH0gZnJvbSAnQG54LWRkZC9sb2dnaW5nL2Jhc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnNvbGVMb2dnZXJPcHRpb25zIHtcbiAgbWluTGV2ZWw/OiBMb2dMZXZlbDtcbiAgY29tcG9uZW50RmlsdGVyPzogc3RyaW5nOyAgLy8gUmVnZXggcGF0dGVyblxufVxuXG5leHBvcnQgY2xhc3MgQ29uc29sZUxvZ2dlciBleHRlbmRzIEJhc2VMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IG1pbkxldmVsOiBMb2dMZXZlbDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ29uc29sZUxvZ2dlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWluTGV2ZWwgPSBvcHRpb25zPy5taW5MZXZlbCA/PyBMb2dMZXZlbC5XQVJOO1xuICB9XG5cbiAgbG9nKGxldmVsOiBMb2dMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogTG9nQ29udGV4dCwgZXJyb3I/OiBFcnJvcik6IHZvaWQge1xuICAgIC8vIEZpbHRlciBieSBsb2cgbGV2ZWwgLSBvbmx5IG91dHB1dCBsb2dzIGF0IG9yIGFib3ZlIG1pbkxldmVsXG4gICAgaWYgKGxldmVsIDwgdGhpcy5taW5MZXZlbCkgcmV0dXJuO1xuICAgIGNvbnN0IGFyZ3M6IGFueVtdID0gW2BbJHtMb2dMZXZlbFtsZXZlbF19XSAke21lc3NhZ2V9YF07XG4gICAgaWYgKGNvbnRleHQgIT0gbnVsbCkgYXJncy5wdXNoKGNvbnRleHQpO1xuICAgIGlmIChlcnJvciAhPSBudWxsKSBhcmdzLnB1c2goZXJyb3IpO1xuICAgIGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgLy8gTm90aGluZyB0byBjbG9zZSBmb3IgY29uc29sZVxuICB9XG59XG5cbi8qKlxuICogUHJvdmlkZSBDb25zb2xlTG9nZ2VyIHdpdGggb3B0aW9uYWwgY29uZmlndXJhdGlvblxuICogQHBhcmFtIG9wdGlvbnMgLSBMb2dnZXIgb3B0aW9ucyAobWluTGV2ZWwgZGVmYXVsdHMgdG8gV0FSTiBpZiBub3Qgc3BlY2lmaWVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvbnNvbGVMb2dnZXIob3B0aW9ucz86IENvbnNvbGVMb2dnZXJPcHRpb25zKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IExPR0dFUixcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBuZXcgQ29uc29sZUxvZ2dlcihvcHRpb25zKVxuICB9O1xufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWxvZ2dpbmctY29uc29sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvbG9nZ2luZy9zcmMvbGliL2NvbnNvbGUvbngtZGRkLWxvZ2dpbmctY29uc29sZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;AAAA;AACA;AACA;AAEO,MAAM,aAAa,SAAS,UAAU,CAAC;AAC9C,IAAI,QAAQ;AACZ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,KAAK,EAAE;AACf,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,IAAI;AAC1D,IAAI;AACJ,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;AACxC;AACA,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ;AACjC,YAAY;AACZ,QAAQ,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD,QAAQ,IAAI,OAAO,IAAI,IAAI;AAC3B,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,QAAQ,IAAI,KAAK,IAAI,IAAI;AACzB,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAQ,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAC5B,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACO,SAAS,oBAAoB,CAAC,OAAO,EAAE;AAC9C,IAAI,OAAO;AACX,QAAQ,OAAO,EAAE,MAAM;AACvB,QAAQ,KAAK,EAAE,IAAI;AACnB,QAAQ,UAAU,EAAE,MAAM,IAAI,aAAa,CAAC,OAAO;AACnD,KAAK;AACL;;ACnCA;AACA;AACA;;;;"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as os from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { BaseLogger, LogLevel, LOGGER } from '@nx-ddd/logging/base';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* FileLogger implementation for multi-provider logging
|
|
8
|
+
*/
|
|
9
|
+
class FileLogger extends BaseLogger {
|
|
10
|
+
writeStream = null;
|
|
11
|
+
minLevel;
|
|
12
|
+
componentFilter;
|
|
13
|
+
startTime;
|
|
14
|
+
constructor(options) {
|
|
15
|
+
super();
|
|
16
|
+
this.minLevel = options?.minLevel ?? LogLevel.DEBUG; // Default: 全レベル記録
|
|
17
|
+
this.componentFilter = options?.componentFilter
|
|
18
|
+
? new RegExp(options.componentFilter)
|
|
19
|
+
: undefined;
|
|
20
|
+
this.startTime = Date.now();
|
|
21
|
+
// Determine log file path
|
|
22
|
+
const logDir = options?.logDir || join(os.homedir(), '.machina', 'logs');
|
|
23
|
+
const date = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
|
|
24
|
+
const component = options?.component || 'app';
|
|
25
|
+
const logFile = options?.filePath || join(logDir, `${component}-${date}.log`);
|
|
26
|
+
// Create log directory
|
|
27
|
+
try {
|
|
28
|
+
const dir = options?.filePath ? join(logFile, '..') : logDir;
|
|
29
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error(`[FileLogger] Failed to create log directory: ${error}`);
|
|
33
|
+
}
|
|
34
|
+
// Open log file
|
|
35
|
+
try {
|
|
36
|
+
this.writeStream = fs.createWriteStream(logFile, { flags: 'a' });
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error(`[FileLogger] Failed to open log file: ${error}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
log(level, message, context, error) {
|
|
43
|
+
// Level filtering
|
|
44
|
+
if (level < this.minLevel)
|
|
45
|
+
return;
|
|
46
|
+
// Component filtering
|
|
47
|
+
if (this.componentFilter && context?.component) {
|
|
48
|
+
if (!this.componentFilter.test(context.component))
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (!this.writeStream)
|
|
52
|
+
return;
|
|
53
|
+
// Format log message
|
|
54
|
+
const timestamp = new Date().toISOString();
|
|
55
|
+
const elapsed = ((Date.now() - this.startTime) / 1000).toFixed(2);
|
|
56
|
+
const levelStr = LogLevel[level];
|
|
57
|
+
const component = context?.component || 'unknown';
|
|
58
|
+
const contextStr = context ? JSON.stringify(context) : '';
|
|
59
|
+
const errorStr = error ? `\n Error: ${error.message}\n Stack: ${error.stack}` : '';
|
|
60
|
+
const logMessage = `[${timestamp}] [+${elapsed}s] [${levelStr}] [${component}] ${message}${contextStr ? ' ' + contextStr : ''}${errorStr}\n`;
|
|
61
|
+
// Write to file
|
|
62
|
+
this.writeStream.write(logMessage);
|
|
63
|
+
}
|
|
64
|
+
close() {
|
|
65
|
+
if (this.writeStream) {
|
|
66
|
+
this.writeStream.end();
|
|
67
|
+
this.writeStream = null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Provide FileLogger with optional configuration
|
|
73
|
+
* @param options - Logger options (minLevel defaults to DEBUG if not specified)
|
|
74
|
+
*/
|
|
75
|
+
function provideFileLogger(options) {
|
|
76
|
+
return {
|
|
77
|
+
provide: LOGGER,
|
|
78
|
+
multi: true,
|
|
79
|
+
useFactory: () => {
|
|
80
|
+
const minLevel = options?.minLevel ?? LogLevel.DEBUG;
|
|
81
|
+
// Determine file path
|
|
82
|
+
let filePath;
|
|
83
|
+
if (options?.filePath) {
|
|
84
|
+
filePath = options.filePath;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const logDir = options?.logDir || join(os.homedir(), '.machina', 'logs');
|
|
88
|
+
const date = new Date().toISOString().split('T')[0];
|
|
89
|
+
const component = options?.component || 'app';
|
|
90
|
+
filePath = join(logDir, `${component}-${date}.log`);
|
|
91
|
+
}
|
|
92
|
+
return new FileLogger({
|
|
93
|
+
filePath,
|
|
94
|
+
minLevel,
|
|
95
|
+
componentFilter: options?.componentFilter
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Generated bundle index. Do not edit.
|
|
103
|
+
*/
|
|
104
|
+
|
|
105
|
+
export { FileLogger, provideFileLogger };
|
|
106
|
+
//# sourceMappingURL=nx-ddd-logging-file.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nx-ddd-logging-file.mjs","sources":["../tmp-esm2022/file/file-logger.js","../tmp-esm2022/file/nx-ddd-logging-file.js"],"sourcesContent":["/**\n * FileLogger implementation for multi-provider logging\n */\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport { join } from 'path';\nimport { BaseLogger, LOGGER, LogLevel } from '@nx-ddd/logging/base';\nexport class FileLogger extends BaseLogger {\n writeStream = null;\n minLevel;\n componentFilter;\n startTime;\n constructor(options) {\n super();\n this.minLevel = options?.minLevel ?? LogLevel.DEBUG; // Default: 全レベル記録\n this.componentFilter = options?.componentFilter\n ? new RegExp(options.componentFilter)\n : undefined;\n this.startTime = Date.now();\n // Determine log file path\n const logDir = options?.logDir || join(os.homedir(), '.machina', 'logs');\n const date = new Date().toISOString().split('T')[0]; // YYYY-MM-DD\n const component = options?.component || 'app';\n const logFile = options?.filePath || join(logDir, `${component}-${date}.log`);\n // Create log directory\n try {\n const dir = options?.filePath ? join(logFile, '..') : logDir;\n fs.mkdirSync(dir, { recursive: true });\n }\n catch (error) {\n console.error(`[FileLogger] Failed to create log directory: ${error}`);\n }\n // Open log file\n try {\n this.writeStream = fs.createWriteStream(logFile, { flags: 'a' });\n }\n catch (error) {\n console.error(`[FileLogger] Failed to open log file: ${error}`);\n }\n }\n log(level, message, context, error) {\n // Level filtering\n if (level < this.minLevel)\n return;\n // Component filtering\n if (this.componentFilter && context?.component) {\n if (!this.componentFilter.test(context.component))\n return;\n }\n if (!this.writeStream)\n return;\n // Format log message\n const timestamp = new Date().toISOString();\n const elapsed = ((Date.now() - this.startTime) / 1000).toFixed(2);\n const levelStr = LogLevel[level];\n const component = context?.component || 'unknown';\n const contextStr = context ? JSON.stringify(context) : '';\n const errorStr = error ? `\\n Error: ${error.message}\\n Stack: ${error.stack}` : '';\n const logMessage = `[${timestamp}] [+${elapsed}s] [${levelStr}] [${component}] ${message}${contextStr ? ' ' + contextStr : ''}${errorStr}\\n`;\n // Write to file\n this.writeStream.write(logMessage);\n }\n close() {\n if (this.writeStream) {\n this.writeStream.end();\n this.writeStream = null;\n }\n }\n}\n/**\n * Provide FileLogger with optional configuration\n * @param options - Logger options (minLevel defaults to DEBUG if not specified)\n */\nexport function provideFileLogger(options) {\n return {\n provide: LOGGER,\n multi: true,\n useFactory: () => {\n const minLevel = options?.minLevel ?? LogLevel.DEBUG;\n // Determine file path\n let filePath;\n if (options?.filePath) {\n filePath = options.filePath;\n }\n else {\n const logDir = options?.logDir || join(os.homedir(), '.machina', 'logs');\n const date = new Date().toISOString().split('T')[0];\n const component = options?.component || 'app';\n filePath = join(logDir, `${component}-${date}.log`);\n }\n return new FileLogger({\n filePath,\n minLevel,\n componentFilter: options?.componentFilter\n });\n }\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2xvZ2dpbmcvc3JjL2xpYi9maWxlL2ZpbGUtbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQVdoRixNQUFNLE9BQU8sVUFBVyxTQUFRLFVBQVU7SUFDaEMsV0FBVyxHQUF1QixJQUFJLENBQUM7SUFDdkMsUUFBUSxDQUFXO0lBQ25CLGVBQWUsQ0FBVTtJQUN6QixTQUFTLENBQVM7SUFFMUIsWUFBWSxPQUEyQjtRQUNyQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUUsa0JBQWtCO1FBQ3hFLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxFQUFFLGVBQWU7WUFDN0MsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7WUFDckMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRTVCLDBCQUEwQjtRQUMxQixNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFF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LyoqXG4gKiBGaWxlTG9nZ2VyIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aS1wcm92aWRlciBsb2dnaW5nXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHR5cGUgeyBXcml0ZVN0cmVhbSB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IEJhc2VMb2dnZXIsIExPR0dFUiwgTG9nTGV2ZWwsIExvZ0NvbnRleHQgfSBmcm9tICdAbngtZGRkL2xvZ2dpbmcvYmFzZSc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVMb2dnZXJPcHRpb25zIHtcbiAgZmlsZVBhdGg/OiBzdHJpbmc7XG4gIGxvZ0Rpcj86IHN0cmluZztcbiAgY29tcG9uZW50Pzogc3RyaW5nOyAgLy8gVXNlZCBmb3IgZGVmYXVsdCBmaWxlbmFtZVxuICBtaW5MZXZlbD86IExvZ0xldmVsO1xuICBjb21wb25lbnRGaWx0ZXI/OiBzdHJpbmc7ICAvLyBSZWdleCBwYXR0ZXJuXG59XG5cbmV4cG9ydCBjbGFzcyBGaWxlTG9nZ2VyIGV4dGVuZHMgQmFzZUxvZ2dlciB7XG4gIHByaXZhdGUgd3JpdGVTdHJlYW06IFdyaXRlU3RyZWFtIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbWluTGV2ZWw6IExvZ0xldmVsO1xuICBwcml2YXRlIGNvbXBvbmVudEZpbHRlcj86IFJlZ0V4cDtcbiAgcHJpdmF0ZSBzdGFydFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogRmlsZUxvZ2dlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWluTGV2ZWwgPSBvcHRpb25zPy5taW5MZXZlbCA/PyBMb2dMZXZlbC5ERUJVRzsgIC8vIERlZmF1bHQ6IOWFqOODrOODmeODq+iomOmMslxuICAgIHRoaXMuY29tcG9uZW50RmlsdGVyID0gb3B0aW9ucz8uY29tcG9uZW50RmlsdGVyXG4gICAgICA/IG5ldyBSZWdFeHAob3B0aW9ucy5jb21wb25lbnRGaWx0ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAvLyBEZXRlcm1pbmUgbG9nIGZpbGUgcGF0aFxuICAgIGNvbnN0IGxvZ0RpciA9IG9wdGlvbnM/LmxvZ0RpciB8fCBqb2luKG9zLmhvbWVkaXIoKSwgJy5tYWNoaW5hJywgJ2xvZ3MnKTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07IC8vIFlZWVktTU0tRERcbiAgICBjb25zdCBjb21wb25lbnQgPSBvcHRpb25zPy5jb21wb25lbnQgfHwgJ2FwcCc7XG4gICAgY29uc3QgbG9nRmlsZSA9IG9wdGlvbnM/LmZpbGVQYXRoIHx8IGpvaW4obG9nRGlyLCBgJHtjb21wb25lbnR9LSR7ZGF0ZX0ubG9nYCk7XG5cbiAgICAvLyBDcmVhdGUgbG9nIGRpcmVjdG9yeVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkaXIgPSBvcHRpb25zPy5maWxlUGF0aCA/IGpvaW4obG9nRmlsZSwgJy4uJykgOiBsb2dEaXI7XG4gICAgICBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgW0ZpbGVMb2dnZXJdIEZhaWxlZCB0byBjcmVhdGUgbG9nIGRpcmVjdG9yeTogJHtlcnJvcn1gKTtcbiAgICB9XG5cbiAgICAvLyBPcGVuIGxvZyBmaWxlXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud3JpdGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlLCB7IGZsYWdzOiAnYScgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtGaWxlTG9nZ2VyXSBGYWlsZWQgdG8gb3BlbiBsb2cgZmlsZTogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICBsb2cobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBMb2dDb250ZXh0LCBlcnJvcj86IEVycm9yKTogdm9pZCB7XG4gICAgLy8gTGV2ZWwgZmlsdGVyaW5nXG4gICAgaWYgKGxldmVsIDwgdGhpcy5taW5MZXZlbCkgcmV0dXJuO1xuXG4gICAgLy8gQ29tcG9uZW50IGZpbHRlcmluZ1xuICAgIGlmICh0aGlzLmNvbXBvbmVudEZpbHRlciAmJiBjb250ZXh0Py5jb21wb25lbnQpIHtcbiAgICAgIGlmICghdGhpcy5jb21wb25lbnRGaWx0ZXIudGVzdChjb250ZXh0LmNvbXBvbmVudCkpIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMud3JpdGVTdHJlYW0pIHJldHVybjtcblxuICAgIC8vIEZvcm1hdCBsb2cgbWVzc2FnZVxuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBjb25zdCBlbGFwc2VkID0gKChEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUpIC8gMTAwMCkudG9GaXhlZCgyKTtcbiAgICBjb25zdCBsZXZlbFN0ciA9IExvZ0xldmVsW2xldmVsXTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0Py5jb21wb25lbnQgfHwgJ3Vua25vd24nO1xuICAgIGNvbnN0IGNvbnRleHRTdHIgPSBjb250ZXh0ID8gSlNPTi5zdHJpbmdpZnkoY29udGV4dCkgOiAnJztcbiAgICBjb25zdCBlcnJvclN0ciA9IGVycm9yID8gYFxcbiAgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1cXG4gIFN0YWNrOiAke2Vycm9yLnN0YWNrfWAgOiAnJztcblxuICAgIGNvbnN0IGxvZ01lc3NhZ2UgPSBgWyR7dGltZXN0YW1wfV0gWyske2VsYXBzZWR9c10gWyR7bGV2ZWxTdHJ9XSBbJHtjb21wb25lbnR9XSAke21lc3NhZ2V9JHtjb250ZXh0U3RyID8gJyAnICsgY29udGV4dFN0ciA6ICcnfSR7ZXJyb3JTdHJ9XFxuYDtcblxuICAgIC8vIFdyaXRlIHRvIGZpbGVcbiAgICB0aGlzLndyaXRlU3RyZWFtLndyaXRlKGxvZ01lc3NhZ2UpO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud3JpdGVTdHJlYW0pIHtcbiAgICAgIHRoaXMud3JpdGVTdHJlYW0uZW5kKCk7XG4gICAgICB0aGlzLndyaXRlU3RyZWFtID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBwcm92aWRlRmlsZUxvZ2dlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVMb2dnZXJQcm92aWRlck9wdGlvbnMge1xuICBjb21wb25lbnQ/OiBzdHJpbmc7XG4gIGxvZ0Rpcj86IHN0cmluZztcbiAgZmlsZVBhdGg/OiBzdHJpbmc7XG4gIG1pbkxldmVsPzogTG9nTGV2ZWw7XG4gIGNvbXBvbmVudEZpbHRlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm92aWRlIEZpbGVMb2dnZXIgd2l0aCBvcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIExvZ2dlciBvcHRpb25zIChtaW5MZXZlbCBkZWZhdWx0cyB0byBERUJVRyBpZiBub3Qgc3BlY2lmaWVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUZpbGVMb2dnZXIob3B0aW9ucz86IEZpbGVMb2dnZXJQcm92aWRlck9wdGlvbnMpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogTE9HR0VSLFxuICAgIG11bHRpOiB0cnVlLFxuICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgIGNvbnN0IG1pbkxldmVsID0gb3B0aW9ucz8ubWluTGV2ZWwgPz8gTG9nTGV2ZWwuREVCVUc7XG5cbiAgICAgIC8vIERldGVybWluZSBmaWxlIHBhdGhcbiAgICAgIGxldCBmaWxlUGF0aDogc3RyaW5nO1xuICAgICAgaWYgKG9wdGlvbnM/LmZpbGVQYXRoKSB7XG4gICAgICAgIGZpbGVQYXRoID0gb3B0aW9ucy5maWxlUGF0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxvZ0RpciA9IG9wdGlvbnM/LmxvZ0RpciB8fCBqb2luKG9zLmhvbWVkaXIoKSwgJy5tYWNoaW5hJywgJ2xvZ3MnKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBvcHRpb25zPy5jb21wb25lbnQgfHwgJ2FwcCc7XG4gICAgICAgIGZpbGVQYXRoID0gam9pbihsb2dEaXIsIGAke2NvbXBvbmVudH0tJHtkYXRlfS5sb2dgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBGaWxlTG9nZ2VyKHtcbiAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgIG1pbkxldmVsLFxuICAgICAgICBjb21wb25lbnRGaWx0ZXI6IG9wdGlvbnM/LmNvbXBvbmVudEZpbHRlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWxvZ2dpbmctZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvbG9nZ2luZy9zcmMvbGliL2ZpbGUvbngtZGRkLWxvZ2dpbmctZmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import { BaseLogger, LogLevel, LOGGER } from '@nx-ddd/logging/base';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { Injectable } from '@angular/core';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* TeeLogger - ファイルとコンソール両方にログを出力(BaseLogger継承版)
|
|
8
|
+
*
|
|
9
|
+
* BaseLoggerを継承することでLoggingServiceのmulti-providerチェーンに統合可能。
|
|
10
|
+
* console.logのオーバーライドを廃止し、正規のLoggingService経由でログレベルを保持する。
|
|
11
|
+
*
|
|
12
|
+
* - initialize() なし: コンソールのみ出力(ConsoleLogger と同等)
|
|
13
|
+
* - initialize(logFile): コンソール + ファイル出力
|
|
14
|
+
* - E2E 時は FileLogger を使用するため、TeeLogger は常にコンソール出力が有効
|
|
15
|
+
*/
|
|
16
|
+
class TeeLogger extends BaseLogger {
|
|
17
|
+
logStream = null;
|
|
18
|
+
enableConsoleOutput = true;
|
|
19
|
+
initialize(logFilePath, forceConsole = false, options) {
|
|
20
|
+
this.logStream = fs.createWriteStream(logFilePath, { flags: 'a' });
|
|
21
|
+
this.enableConsoleOutput = forceConsole || !options?.isE2e;
|
|
22
|
+
}
|
|
23
|
+
log(level, message) {
|
|
24
|
+
const levelStr = LogLevel[level] ?? 'LOG';
|
|
25
|
+
if (this.enableConsoleOutput) {
|
|
26
|
+
const time = new Date().toTimeString().slice(0, 8);
|
|
27
|
+
const method = level >= LogLevel.ERROR ? console.error
|
|
28
|
+
: level >= LogLevel.WARN ? console.warn
|
|
29
|
+
: console.log;
|
|
30
|
+
method(`[${time}][${levelStr}] ${message}`);
|
|
31
|
+
}
|
|
32
|
+
if (this.logStream) {
|
|
33
|
+
const ts = new Date().toISOString();
|
|
34
|
+
this.logStream.write(JSON.stringify({ ts, lvl: levelStr, msg: message }) + '\n');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
close() {
|
|
38
|
+
if (this.logStream) {
|
|
39
|
+
this.logStream.end();
|
|
40
|
+
this.logStream = null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: TeeLogger, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
44
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: TeeLogger });
|
|
45
|
+
}
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: TeeLogger, decorators: [{
|
|
47
|
+
type: Injectable
|
|
48
|
+
}] });
|
|
49
|
+
function provideTeeLogger() {
|
|
50
|
+
return [
|
|
51
|
+
{ provide: TeeLogger, useClass: TeeLogger },
|
|
52
|
+
{ provide: LOGGER, multi: true, useExisting: TeeLogger },
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Generated bundle index. Do not edit.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
export { TeeLogger, provideTeeLogger };
|
|
61
|
+
//# sourceMappingURL=nx-ddd-logging-tee.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nx-ddd-logging-tee.mjs","sources":["../tmp-esm2022/tee/tee.logger.js","../tmp-esm2022/tee/nx-ddd-logging-tee.js"],"sourcesContent":["import * as fs from 'fs';\nimport { BaseLogger, LOGGER, LogLevel } from '@nx-ddd/logging/base';\nimport { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * TeeLogger - ファイルとコンソール両方にログを出力(BaseLogger継承版)\n *\n * BaseLoggerを継承することでLoggingServiceのmulti-providerチェーンに統合可能。\n * console.logのオーバーライドを廃止し、正規のLoggingService経由でログレベルを保持する。\n *\n * - initialize() なし: コンソールのみ出力(ConsoleLogger と同等)\n * - initialize(logFile): コンソール + ファイル出力\n * - E2E 時は FileLogger を使用するため、TeeLogger は常にコンソール出力が有効\n */\nexport class TeeLogger extends BaseLogger {\n logStream = null;\n enableConsoleOutput = true;\n initialize(logFilePath, forceConsole = false, options) {\n this.logStream = fs.createWriteStream(logFilePath, { flags: 'a' });\n this.enableConsoleOutput = forceConsole || !options?.isE2e;\n }\n log(level, message) {\n const levelStr = LogLevel[level] ?? 'LOG';\n if (this.enableConsoleOutput) {\n const time = new Date().toTimeString().slice(0, 8);\n const method = level >= LogLevel.ERROR ? console.error\n : level >= LogLevel.WARN ? console.warn\n : console.log;\n method(`[${time}][${levelStr}] ${message}`);\n }\n if (this.logStream) {\n const ts = new Date().toISOString();\n this.logStream.write(JSON.stringify({ ts, lvl: levelStr, msg: message }) + '\\n');\n }\n }\n close() {\n if (this.logStream) {\n this.logStream.end();\n this.logStream = null;\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: TeeLogger, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: TeeLogger });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: TeeLogger, decorators: [{\n type: Injectable\n }] });\nexport function provideTeeLogger() {\n return [\n { provide: TeeLogger, useClass: TeeLogger },\n { provide: LOGGER, multi: true, useExisting: TeeLogger },\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVlLmxvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvbG9nZ2luZy9zcmMvbGliL3RlZS90ZWUubG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7O0FBRXJEOzs7Ozs7Ozs7R0FTRztBQUVILE1BQU0sT0FBTyxTQUFVLFNBQVEsVUFBVTtJQUMvQixTQUFTLEdBQTBCLElBQUksQ0FBQztJQUN4QyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFFbkMsVUFBVSxDQUFDLFdBQW1CLEVBQUUsWUFBWSxHQUFHLEtBQUssRUFBRSxPQUE2QjtRQUNqRixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztJQUM3RCxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQWUsRUFBRSxPQUFlO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7UUFFMUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkQsTUFBTSxNQUFNLEdBQUcsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUN6QyxDQUFDLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJO29CQUN2QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUMzQixNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ25GLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7dUdBL0JVLFNBQVM7MkdBQVQsU0FBUzs7MkZBQVQsU0FBUztrQkFEckIsVUFBVTs7QUFtQ1gsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixPQUFPO1FBQ0wsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7UUFDM0MsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRTtLQUN6RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IEJhc2VMb2dnZXIsIExPR0dFUiwgTG9nTGV2ZWwgfSBmcm9tICdAbngtZGRkL2xvZ2dpbmcvYmFzZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFRlZUxvZ2dlciAtIOODleOCoeOCpOODq+OBqOOCs+ODs+OCveODvOODq+S4oeaWueOBq+ODreOCsOOCkuWHuuWKm++8iEJhc2VMb2dnZXLntpnmib/niYjvvIlcbiAqXG4gKiBCYXNlTG9nZ2Vy44KS57aZ5om/44GZ44KL44GT44Go44GnTG9nZ2luZ1NlcnZpY2Xjga5tdWx0aS1wcm92aWRlcuODgeOCp+ODvOODs+OBq+e1seWQiOWPr+iDveOAglxuICogY29uc29sZS5sb2fjga7jgqrjg7zjg5Djg7zjg6njgqTjg4njgpLlu4PmraLjgZfjgIHmraPopo/jga5Mb2dnaW5nU2VydmljZee1jOeUseOBp+ODreOCsOODrOODmeODq+OCkuS/neaMgeOBmeOCi+OAglxuICpcbiAqIC0gaW5pdGlhbGl6ZSgpIOOBquOBlzog44Kz44Oz44K944O844Or44Gu44G/5Ye65Yqb77yIQ29uc29sZUxvZ2dlciDjgajlkIznrYnvvIlcbiAqIC0gaW5pdGlhbGl6ZShsb2dGaWxlKTog44Kz44Oz44K944O844OrICsg44OV44Kh44Kk44Or5Ye65YqbXG4gKiAtIEUyRSDmmYLjga8gRmlsZUxvZ2dlciDjgpLkvb/nlKjjgZnjgovjgZ/jgoHjgIFUZWVMb2dnZXIg44Gv5bi444Gr44Kz44Oz44K944O844Or5Ye65Yqb44GM5pyJ5Yq5XG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUZWVMb2dnZXIgZXh0ZW5kcyBCYXNlTG9nZ2VyIHtcbiAgcHJpdmF0ZSBsb2dTdHJlYW06IGZzLldyaXRlU3RyZWFtIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZW5hYmxlQ29uc29sZU91dHB1dCA9IHRydWU7XG5cbiAgaW5pdGlhbGl6ZShsb2dGaWxlUGF0aDogc3RyaW5nLCBmb3JjZUNvbnNvbGUgPSBmYWxzZSwgb3B0aW9ucz86IHsgaXNFMmU/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB0aGlzLmxvZ1N0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGxvZ0ZpbGVQYXRoLCB7IGZsYWdzOiAnYScgfSk7XG4gICAgdGhpcy5lbmFibGVDb25zb2xlT3V0cHV0ID0gZm9yY2VDb25zb2xlIHx8ICFvcHRpb25zPy5pc0UyZTtcbiAgfVxuXG4gIGxvZyhsZXZlbDogTG9nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGxldmVsU3RyID0gTG9nTGV2ZWxbbGV2ZWxdID8/ICdMT0cnO1xuXG4gICAgaWYgKHRoaXMuZW5hYmxlQ29uc29sZU91dHB1dCkge1xuICAgICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKCkudG9UaW1lU3RyaW5nKCkuc2xpY2UoMCwgOCk7XG4gICAgICBjb25zdCBtZXRob2QgPSBsZXZlbCA+PSBMb2dMZXZlbC5FUlJPUiA/IGNvbnNvbGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICA6IGxldmVsID49IExvZ0xldmVsLldBUk4gPyBjb25zb2xlLndhcm5cbiAgICAgICAgICAgICAgICAgICA6IGNvbnNvbGUubG9nO1xuICAgICAgbWV0aG9kKGBbJHt0aW1lfV1bJHtsZXZlbFN0cn1dICR7bWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dTdHJlYW0pIHtcbiAgICAgIGNvbnN0IHRzID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgdGhpcy5sb2dTdHJlYW0ud3JpdGUoSlNPTi5zdHJpbmdpZnkoeyB0cywgbHZsOiBsZXZlbFN0ciwgbXNnOiBtZXNzYWdlIH0pICsgJ1xcbicpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvZ1N0cmVhbSkge1xuICAgICAgdGhpcy5sb2dTdHJlYW0uZW5kKCk7XG4gICAgICB0aGlzLmxvZ1N0cmVhbSA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGVlTG9nZ2VyKCk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIHsgcHJvdmlkZTogVGVlTG9nZ2VyLCB1c2VDbGFzczogVGVlTG9nZ2VyIH0sXG4gICAgeyBwcm92aWRlOiBMT0dHRVIsIG11bHRpOiB0cnVlLCB1c2VFeGlzdGluZzogVGVlTG9nZ2VyIH0sXG4gIF07XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWxvZ2dpbmctdGVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9sb2dnaW5nL3NyYy9saWIvdGVlL254LWRkZC1sb2dnaW5nLXRlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,SAAS,SAAS,UAAU,CAAC;AAC1C,IAAI,SAAS,GAAG,IAAI;AACpB,IAAI,mBAAmB,GAAG,IAAI;AAC9B,IAAI,UAAU,CAAC,WAAW,EAAE,YAAY,GAAG,KAAK,EAAE,OAAO,EAAE;AAC3D,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC1E,QAAQ,IAAI,CAAC,mBAAmB,GAAG,YAAY,IAAI,CAAC,OAAO,EAAE,KAAK;AAClE,IAAI;AACJ,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE;AACxB,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK;AACjD,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACtC,YAAY,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9D,YAAY,MAAM,MAAM,GAAG,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC;AAC7D,kBAAkB,KAAK,IAAI,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;AACnD,sBAAsB,OAAO,CAAC,GAAG;AACjC,YAAY,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AACvD,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC/C,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;AAC5F,QAAQ;AACR,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;AAChC,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI;AACjC,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AACtK,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACvH;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnH,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC,EAAE,CAAC;AACN,SAAS,gBAAgB,GAAG;AACnC,IAAI,OAAO;AACX,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;AACnD,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE;AAChE,KAAK;AACL;;ACpDA;AACA;AACA;;;;"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Injectable, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
|
|
3
|
+
import { LOGGER as LOGGER$1, LOG_FILTER as LOG_FILTER$1, LogLevel as LogLevel$1 } from '@nx-ddd/logging/base';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* LoggingService interfaces
|
|
7
|
+
*
|
|
8
|
+
* Provides structured logging with different log levels and file output
|
|
9
|
+
*/
|
|
10
|
+
var LogLevel;
|
|
11
|
+
(function (LogLevel) {
|
|
12
|
+
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
13
|
+
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
14
|
+
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
|
15
|
+
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
|
16
|
+
LogLevel[LogLevel["FATAL"] = 4] = "FATAL";
|
|
17
|
+
})(LogLevel || (LogLevel = {}));
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Base Logger class for multi-provider logging system
|
|
21
|
+
*/
|
|
22
|
+
const LOGGER = new InjectionToken('Logger');
|
|
23
|
+
class BaseLogger {
|
|
24
|
+
// Convenience methods
|
|
25
|
+
debug(message, context) {
|
|
26
|
+
this.log(LogLevel.DEBUG, message, context);
|
|
27
|
+
}
|
|
28
|
+
info(message, context) {
|
|
29
|
+
this.log(LogLevel.INFO, message, context);
|
|
30
|
+
}
|
|
31
|
+
warn(message, context) {
|
|
32
|
+
this.log(LogLevel.WARN, message, context);
|
|
33
|
+
}
|
|
34
|
+
error(message, error, context) {
|
|
35
|
+
this.log(LogLevel.ERROR, message, context, error);
|
|
36
|
+
}
|
|
37
|
+
fatal(message, error, context) {
|
|
38
|
+
this.log(LogLevel.FATAL, message, context, error);
|
|
39
|
+
}
|
|
40
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: BaseLogger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
41
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: BaseLogger });
|
|
42
|
+
}
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: BaseLogger, decorators: [{
|
|
44
|
+
type: Injectable
|
|
45
|
+
}] });
|
|
46
|
+
function provideLogger(useFactory) {
|
|
47
|
+
return {
|
|
48
|
+
provide: LOGGER,
|
|
49
|
+
multi: true,
|
|
50
|
+
useFactory,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* LogFilter - Simple function-based log filtering
|
|
56
|
+
*/
|
|
57
|
+
const LOG_FILTER = new InjectionToken('LogFilter');
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Provider functions for log filtering
|
|
61
|
+
*/
|
|
62
|
+
/**
|
|
63
|
+
* Provide a log filter function
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* // Filter by log level
|
|
67
|
+
* provideLogFilter((level) => level >= LogLevel.WARN)
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* // Filter by component
|
|
71
|
+
* provideLogFilter((level, context) => context?.component?.startsWith('My'))
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* // Allow all logs
|
|
75
|
+
* provideLogFilter(() => true)
|
|
76
|
+
*/
|
|
77
|
+
function provideLogFilter(filter) {
|
|
78
|
+
return { provide: LOG_FILTER, useValue: filter };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Provide a log filter with explicit configuration
|
|
82
|
+
* @param config - Filter configuration (minLevel defaults to WARN)
|
|
83
|
+
*/
|
|
84
|
+
function provideLogFilterWithConfig(config) {
|
|
85
|
+
const minLevel = config?.minLevel ?? LogLevel.WARN;
|
|
86
|
+
const componentRegex = config?.componentPattern ? new RegExp(config.componentPattern) : null;
|
|
87
|
+
return provideLogFilter((level, context) => {
|
|
88
|
+
if (level < minLevel)
|
|
89
|
+
return false;
|
|
90
|
+
if (componentRegex && context?.component && !componentRegex.test(context.component)) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
return true;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* @deprecated Use provideLogFilterWithConfig() instead.
|
|
98
|
+
* This function directly accesses process.env which violates the rule
|
|
99
|
+
* that packages should not access environment variables directly.
|
|
100
|
+
*
|
|
101
|
+
* Migration example:
|
|
102
|
+
* ```typescript
|
|
103
|
+
* // Before (in packages)
|
|
104
|
+
* provideLogFilterFromEnv()
|
|
105
|
+
*
|
|
106
|
+
* // After (in application layer)
|
|
107
|
+
* provideLogFilterWithConfig({
|
|
108
|
+
* minLevel: process.env['LOG_LEVEL'] ? LogLevel[process.env['LOG_LEVEL'].toUpperCase()] : undefined,
|
|
109
|
+
* componentPattern: process.env['LOG_COMPONENTS']
|
|
110
|
+
* })
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
function provideLogFilterFromEnv() {
|
|
114
|
+
console.warn('[DEPRECATED] provideLogFilterFromEnv() is deprecated. Use provideLogFilterWithConfig() instead.');
|
|
115
|
+
return provideLogFilterWithConfig();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const LOGGING_SERVICE = new InjectionToken('LoggingService');
|
|
119
|
+
class LoggingService {
|
|
120
|
+
loggers = inject(LOGGER$1, { optional: true }) ?? [];
|
|
121
|
+
filter = inject(LOG_FILTER$1, { optional: true });
|
|
122
|
+
getLogger(name) {
|
|
123
|
+
const format = (...args) => {
|
|
124
|
+
return args.map(arg => {
|
|
125
|
+
if (typeof arg === 'string')
|
|
126
|
+
return arg;
|
|
127
|
+
if (arg === undefined)
|
|
128
|
+
return 'undefined';
|
|
129
|
+
if (arg === null)
|
|
130
|
+
return 'null';
|
|
131
|
+
const serialized = JSON.stringify(arg);
|
|
132
|
+
return serialized !== undefined ? serialized : String(arg);
|
|
133
|
+
}).join(' ');
|
|
134
|
+
};
|
|
135
|
+
return {
|
|
136
|
+
log: (...args) => this.log(LogLevel$1.DEBUG, format(`[${name}]`, ...args)),
|
|
137
|
+
debug: (...args) => this.log(LogLevel$1.DEBUG, format(`[${name}]`, ...args)),
|
|
138
|
+
info: (...args) => this.log(LogLevel$1.INFO, format(`[${name}]`, ...args)),
|
|
139
|
+
warn: (...args) => this.log(LogLevel$1.WARN, format(`[${name}]`, ...args)),
|
|
140
|
+
error: (...args) => this.log(LogLevel$1.ERROR, format(`[${name}]`, ...args)),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
log(level, message, context, error) {
|
|
144
|
+
// Apply filtering at service level if LogFilter is provided
|
|
145
|
+
if (this.filter && !this.filter(level, context))
|
|
146
|
+
return;
|
|
147
|
+
this.loggers.forEach(logger => logger.log(level, message, context, error));
|
|
148
|
+
}
|
|
149
|
+
close() {
|
|
150
|
+
this.loggers.forEach(logger => logger.close());
|
|
151
|
+
}
|
|
152
|
+
debug(message, context) {
|
|
153
|
+
this.log(LogLevel$1.DEBUG, message, context);
|
|
154
|
+
}
|
|
155
|
+
info(message, context) {
|
|
156
|
+
this.log(LogLevel$1.INFO, message, context);
|
|
157
|
+
}
|
|
158
|
+
warn(message, context) {
|
|
159
|
+
this.log(LogLevel$1.WARN, message, context);
|
|
160
|
+
}
|
|
161
|
+
error(message, error, context) {
|
|
162
|
+
this.log(LogLevel$1.ERROR, message, context, error);
|
|
163
|
+
}
|
|
164
|
+
fatal(message, error, context) {
|
|
165
|
+
this.log(LogLevel$1.FATAL, message, context, error);
|
|
166
|
+
}
|
|
167
|
+
setLogLevel(_level) {
|
|
168
|
+
// this.loggers.forEach(logger => logger.setLogLevel(level));
|
|
169
|
+
}
|
|
170
|
+
setComponent(_component) {
|
|
171
|
+
// this.loggers.forEach(logger => logger.setComponent(component));
|
|
172
|
+
}
|
|
173
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
174
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: LoggingService, providedIn: 'root' });
|
|
175
|
+
}
|
|
176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: LoggingService, decorators: [{
|
|
177
|
+
type: Injectable,
|
|
178
|
+
args: [{ providedIn: 'root' }]
|
|
179
|
+
}] });
|
|
180
|
+
|
|
181
|
+
let globalLogging = null;
|
|
182
|
+
function setGlobalLogging(logging) {
|
|
183
|
+
globalLogging = logging;
|
|
184
|
+
}
|
|
185
|
+
function getGlobalLogging() {
|
|
186
|
+
return globalLogging;
|
|
187
|
+
}
|
|
188
|
+
function createLogger(name) {
|
|
189
|
+
return globalLogging;
|
|
190
|
+
}
|
|
191
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
192
|
+
const noop = () => { };
|
|
193
|
+
const noopLogger = { log: noop, debug: noop, info: noop, warn: noop, error: noop };
|
|
194
|
+
function getLogger(name) {
|
|
195
|
+
return globalLogging?.getLogger(name) ?? noopLogger;
|
|
196
|
+
}
|
|
197
|
+
function provideGlobalLogging() {
|
|
198
|
+
return makeEnvironmentProviders([
|
|
199
|
+
provideAppInitializer(() => {
|
|
200
|
+
return setGlobalLogging(inject(LoggingService));
|
|
201
|
+
})
|
|
202
|
+
]);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Generated bundle index. Do not edit.
|
|
207
|
+
*/
|
|
208
|
+
|
|
209
|
+
export { BaseLogger, LOGGER, LOGGING_SERVICE, LOG_FILTER, LogLevel, LoggingService, createLogger, getGlobalLogging, getLogger, globalLogging as logging, provideGlobalLogging, provideLogFilter, provideLogFilterFromEnv, provideLogFilterWithConfig, provideLogger, setGlobalLogging };
|
|
210
|
+
//# sourceMappingURL=nx-ddd-logging.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nx-ddd-logging.mjs","sources":["../tmp-esm2022/base/interfaces.js","../tmp-esm2022/base/base.logger.js","../tmp-esm2022/base/log-filter.js","../tmp-esm2022/base/providers.js","../tmp-esm2022/logging.service.js","../tmp-esm2022/global-logging.js","../tmp-esm2022/nx-ddd-logging.js"],"sourcesContent":["/**\n * LoggingService interfaces\n *\n * Provides structured logging with different log levels and file output\n */\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n LogLevel[LogLevel[\"FATAL\"] = 4] = \"FATAL\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvbG9nZ2luZy9zcmMvbGliL2Jhc2UvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsTUFBTSxDQUFOLElBQVksUUFNWDtBQU5ELFdBQVksUUFBUTtJQUNsQix5Q0FBUyxDQUFBO0lBQ1QsdUNBQVEsQ0FBQTtJQUNSLHVDQUFRLENBQUE7SUFDUix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNYLENBQUMsRUFOVyxRQUFRLEtBQVIsUUFBUSxRQU1uQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTG9nZ2luZ1NlcnZpY2UgaW50ZXJmYWNlc1xuICpcbiAqIFByb3ZpZGVzIHN0cnVjdHVyZWQgbG9nZ2luZyB3aXRoIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCBmaWxlIG91dHB1dFxuICovXG5cbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcbiAgREVCVUcgPSAwLFxuICBJTkZPID0gMSxcbiAgV0FSTiA9IDIsXG4gIEVSUk9SID0gMyxcbiAgRkFUQUwgPSA0LFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbnRleHQge1xuICBjb21wb25lbnQ/OiBzdHJpbmc7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2luZ1NlcnZpY2Uge1xuICAvKipcbiAgICogTG9nIGRlYnVnIG1lc3NhZ2UgKGZvciBkZXZlbG9wbWVudC90cm91Ymxlc2hvb3RpbmcpXG4gICAqL1xuICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogTG9nIGluZm9ybWF0aW9uYWwgbWVzc2FnZVxuICAgKi9cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogTG9nIHdhcm5pbmcgbWVzc2FnZVxuICAgKi9cbiAgd2FybihtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogTG9nIGVycm9yIG1lc3NhZ2VcbiAgICovXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiBFcnJvciwgY29udGV4dD86IExvZ0NvbnRleHQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBMb2cgZmF0YWwgZXJyb3IgbWVzc2FnZSAoYXBwbGljYXRpb24gY2Fubm90IGNvbnRpbnVlKVxuICAgKi9cbiAgZmF0YWwobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IEVycm9yLCBjb250ZXh0PzogTG9nQ29udGV4dCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldCBsb2cgbGV2ZWwgZmlsdGVyXG4gICAqL1xuICBzZXRMb2dMZXZlbChsZXZlbDogTG9nTGV2ZWwpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXQgY29tcG9uZW50IG5hbWUgZm9yIHRoaXMgbG9nZ2VyXG4gICAqL1xuICBzZXRDb21wb25lbnQoY29tcG9uZW50OiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDbG9zZSBsb2dnZXIgYW5kIGZsdXNoIGJ1ZmZlcnNcbiAgICovXG4gIGNsb3NlKCk6IHZvaWQ7XG59XG4iXX0=","/**\n * Base Logger class for multi-provider logging system\n */\nimport { Injectable, InjectionToken } from '@angular/core';\nimport { LogLevel } from './interfaces';\nimport * as i0 from \"@angular/core\";\nexport const LOGGER = new InjectionToken('Logger');\nexport class BaseLogger {\n // Convenience methods\n debug(message, context) {\n this.log(LogLevel.DEBUG, message, context);\n }\n info(message, context) {\n this.log(LogLevel.INFO, message, context);\n }\n warn(message, context) {\n this.log(LogLevel.WARN, message, context);\n }\n error(message, error, context) {\n this.log(LogLevel.ERROR, message, context, error);\n }\n fatal(message, error, context) {\n this.log(LogLevel.FATAL, message, context, error);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: BaseLogger, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: BaseLogger });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: BaseLogger, decorators: [{\n type: Injectable\n }] });\nexport function provideLogger(useFactory) {\n return {\n provide: LOGGER,\n multi: true,\n useFactory,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2xvZ2dpbmcvc3JjL2xpYi9iYXNlL2Jhc2UubG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFFBQVEsRUFBYyxNQUFNLGNBQWMsQ0FBQzs7QUFFcEQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBYyxDQUFhLFFBQVEsQ0FBQyxDQUFDO0FBRy9ELE1BQU0sT0FBZ0IsVUFBVTtJQWdCOUIsc0JBQXNCO0lBQ3RCLEtBQUssQ0FBQyxPQUFlLEVBQUUsT0FBb0I7UUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxPQUFvQjtRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBZSxFQUFFLE9BQW9CO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFlLEVBQUUsS0FBYSxFQUFFLE9BQW9CO1FBQ3hELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBZSxFQUFFLEtBQWEsRUFBRSxPQUFvQjtRQUN4RCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO3VHQW5DbUIsVUFBVTsyR0FBVixVQUFVOzsyRkFBVixVQUFVO2tCQUQvQixVQUFVOztBQXVDWCxNQUFNLFVBQVUsYUFBYSxDQUFDLFVBQTRCO0lBQ3hELE9BQU87UUFDTCxPQUFPLEVBQUUsTUFBTTtRQUNmLEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVTtLQUNYLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCYXNlIExvZ2dlciBjbGFzcyBmb3IgbXVsdGktcHJvdmlkZXIgbG9nZ2luZyBzeXN0ZW1cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ0xldmVsLCBMb2dDb250ZXh0IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IExPR0dFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCYXNlTG9nZ2VyPignTG9nZ2VyJyk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTG9nZ2VyIHtcbiAgLyoqXG4gICAqIE1haW4gbG9nIG1ldGhvZCB0aGF0IGFsbCBsb2dnZXJzIG11c3QgaW1wbGVtZW50XG4gICAqL1xuICBhYnN0cmFjdCBsb2coXG4gICAgbGV2ZWw6IExvZ0xldmVsLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBjb250ZXh0PzogTG9nQ29udGV4dCxcbiAgICBlcnJvcj86IEVycm9yXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENsb3NlIGxvZ2dlciBhbmQgZmx1c2ggYnVmZmVyc1xuICAgKi9cbiAgYWJzdHJhY3QgY2xvc2UoKTogdm9pZDtcblxuICAvLyBDb252ZW5pZW5jZSBtZXRob2RzXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IExvZ0NvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5ERUJVRywgbWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IExvZ0NvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5JTkZPLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogTG9nQ29udGV4dCk6IHZvaWQge1xuICAgIHRoaXMubG9nKExvZ0xldmVsLldBUk4sIG1lc3NhZ2UsIGNvbnRleHQpO1xuICB9XG5cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IEVycm9yLCBjb250ZXh0PzogTG9nQ29udGV4dCk6IHZvaWQge1xuICAgIHRoaXMubG9nKExvZ0xldmVsLkVSUk9SLCBtZXNzYWdlLCBjb250ZXh0LCBlcnJvcik7XG4gIH1cblxuICBmYXRhbChtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogRXJyb3IsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5sb2coTG9nTGV2ZWwuRkFUQUwsIG1lc3NhZ2UsIGNvbnRleHQsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUxvZ2dlcih1c2VGYWN0b3J5OiAoKSA9PiBCYXNlTG9nZ2VyKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IExPR0dFUixcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICB1c2VGYWN0b3J5LFxuICB9O1xufVxuIl19","/**\n * LogFilter - Simple function-based log filtering\n */\nimport { InjectionToken } from '@angular/core';\nexport const LOG_FILTER = new InjectionToken('LogFilter');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvbG9nZ2luZy9zcmMvbGliL2Jhc2UvbG9nLWZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFXL0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxDQUFjLFdBQVcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMb2dGaWx0ZXIgLSBTaW1wbGUgZnVuY3Rpb24tYmFzZWQgbG9nIGZpbHRlcmluZ1xuICovXG5cbmltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dMZXZlbCwgTG9nQ29udGV4dCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogTG9nIGZpbHRlciBmdW5jdGlvbiB0eXBlXG4gKiBAcGFyYW0gbGV2ZWwgLSBUaGUgbG9nIGxldmVsXG4gKiBAcGFyYW0gY29udGV4dCAtIE9wdGlvbmFsIGxvZyBjb250ZXh0IChjb21wb25lbnQgbmFtZSwgZXRjLilcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGxvZyBzaG91bGQgYmUgb3V0cHV0LCBmYWxzZSB0byBzdXBwcmVzc1xuICovXG5leHBvcnQgdHlwZSBMb2dGaWx0ZXJGbiA9IChsZXZlbDogTG9nTGV2ZWwsIGNvbnRleHQ/OiBMb2dDb250ZXh0KSA9PiBib29sZWFuO1xuXG5leHBvcnQgY29uc3QgTE9HX0ZJTFRFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2dGaWx0ZXJGbj4oJ0xvZ0ZpbHRlcicpO1xuIl19","/**\n * Provider functions for log filtering\n */\nimport { LogLevel } from './interfaces';\nimport { LOG_FILTER } from './log-filter';\n/**\n * Provide a log filter function\n *\n * @example\n * // Filter by log level\n * provideLogFilter((level) => level >= LogLevel.WARN)\n *\n * @example\n * // Filter by component\n * provideLogFilter((level, context) => context?.component?.startsWith('My'))\n *\n * @example\n * // Allow all logs\n * provideLogFilter(() => true)\n */\nexport function provideLogFilter(filter) {\n return { provide: LOG_FILTER, useValue: filter };\n}\n/**\n * Provide a log filter with explicit configuration\n * @param config - Filter configuration (minLevel defaults to WARN)\n */\nexport function provideLogFilterWithConfig(config) {\n const minLevel = config?.minLevel ?? LogLevel.WARN;\n const componentRegex = config?.componentPattern ? new RegExp(config.componentPattern) : null;\n return provideLogFilter((level, context) => {\n if (level < minLevel)\n return false;\n if (componentRegex && context?.component && !componentRegex.test(context.component)) {\n return false;\n }\n return true;\n });\n}\n/**\n * @deprecated Use provideLogFilterWithConfig() instead.\n * This function directly accesses process.env which violates the rule\n * that packages should not access environment variables directly.\n *\n * Migration example:\n * ```typescript\n * // Before (in packages)\n * provideLogFilterFromEnv()\n *\n * // After (in application layer)\n * provideLogFilterWithConfig({\n * minLevel: process.env['LOG_LEVEL'] ? LogLevel[process.env['LOG_LEVEL'].toUpperCase()] : undefined,\n * componentPattern: process.env['LOG_COMPONENTS']\n * })\n * ```\n */\nexport function provideLogFilterFromEnv() {\n console.warn('[DEPRECATED] provideLogFilterFromEnv() is deprecated. Use provideLogFilterWithConfig() instead.');\n return provideLogFilterWithConfig();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9sb2dnaW5nL3NyYy9saWIvYmFzZS9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFHSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQWUsTUFBTSxjQUFjLENBQUM7QUFFdkQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBbUI7SUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ25ELENBQUM7QUFVRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUFBd0I7SUFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ25ELE1BQU0sY0FBYyxHQUFHLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUU3RixPQUFPLGdCQUFnQixDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3pDLElBQUksS0FBSyxHQUFHLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuQyxJQUFJLGNBQWMsSUFBSSxPQUFPLEVBQUUsU0FBUyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QjtJQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7SUFDaEgsT0FBTywwQkFBMEIsRUFBRSxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3ZpZGVyIGZ1bmN0aW9ucyBmb3IgbG9nIGZpbHRlcmluZ1xuICovXG5cbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dfRklMVEVSLCBMb2dGaWx0ZXJGbiB9IGZyb20gJy4vbG9nLWZpbHRlcic7XG5cbi8qKlxuICogUHJvdmlkZSBhIGxvZyBmaWx0ZXIgZnVuY3Rpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRmlsdGVyIGJ5IGxvZyBsZXZlbFxuICogcHJvdmlkZUxvZ0ZpbHRlcigobGV2ZWwpID0+IGxldmVsID49IExvZ0xldmVsLldBUk4pXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZpbHRlciBieSBjb21wb25lbnRcbiAqIHByb3ZpZGVMb2dGaWx0ZXIoKGxldmVsLCBjb250ZXh0KSA9PiBjb250ZXh0Py5jb21wb25lbnQ/LnN0YXJ0c1dpdGgoJ015JykpXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEFsbG93IGFsbCBsb2dzXG4gKiBwcm92aWRlTG9nRmlsdGVyKCgpID0+IHRydWUpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTG9nRmlsdGVyKGZpbHRlcjogTG9nRmlsdGVyRm4pOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IExPR19GSUxURVIsIHVzZVZhbHVlOiBmaWx0ZXIgfTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBsb2cgZmlsdGVyaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRmlsdGVyQ29uZmlnIHtcbiAgbWluTGV2ZWw/OiBMb2dMZXZlbDtcbiAgY29tcG9uZW50UGF0dGVybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm92aWRlIGEgbG9nIGZpbHRlciB3aXRoIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBjb25maWcgLSBGaWx0ZXIgY29uZmlndXJhdGlvbiAobWluTGV2ZWwgZGVmYXVsdHMgdG8gV0FSTilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVMb2dGaWx0ZXJXaXRoQ29uZmlnKGNvbmZpZz86IExvZ0ZpbHRlckNvbmZpZyk6IFByb3ZpZGVyIHtcbiAgY29uc3QgbWluTGV2ZWwgPSBjb25maWc/Lm1pbkxldmVsID8/IExvZ0xldmVsLldBUk47XG4gIGNvbnN0IGNvbXBvbmVudFJlZ2V4ID0gY29uZmlnPy5jb21wb25lbnRQYXR0ZXJuID8gbmV3IFJlZ0V4cChjb25maWcuY29tcG9uZW50UGF0dGVybikgOiBudWxsO1xuXG4gIHJldHVybiBwcm92aWRlTG9nRmlsdGVyKChsZXZlbCwgY29udGV4dCkgPT4ge1xuICAgIGlmIChsZXZlbCA8IG1pbkxldmVsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNvbXBvbmVudFJlZ2V4ICYmIGNvbnRleHQ/LmNvbXBvbmVudCAmJiAhY29tcG9uZW50UmVnZXgudGVzdChjb250ZXh0LmNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBwcm92aWRlTG9nRmlsdGVyV2l0aENvbmZpZygpIGluc3RlYWQuXG4gKiBUaGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGFjY2Vzc2VzIHByb2Nlc3MuZW52IHdoaWNoIHZpb2xhdGVzIHRoZSBydWxlXG4gKiB0aGF0IHBhY2thZ2VzIHNob3VsZCBub3QgYWNjZXNzIGVudmlyb25tZW50IHZhcmlhYmxlcyBkaXJlY3RseS5cbiAqXG4gKiBNaWdyYXRpb24gZXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEJlZm9yZSAoaW4gcGFja2FnZXMpXG4gKiBwcm92aWRlTG9nRmlsdGVyRnJvbUVudigpXG4gKlxuICogLy8gQWZ0ZXIgKGluIGFwcGxpY2F0aW9uIGxheWVyKVxuICogcHJvdmlkZUxvZ0ZpbHRlcldpdGhDb25maWcoe1xuICogICBtaW5MZXZlbDogcHJvY2Vzcy5lbnZbJ0xPR19MRVZFTCddID8gTG9nTGV2ZWxbcHJvY2Vzcy5lbnZbJ0xPR19MRVZFTCddLnRvVXBwZXJDYXNlKCldIDogdW5kZWZpbmVkLFxuICogICBjb21wb25lbnRQYXR0ZXJuOiBwcm9jZXNzLmVudlsnTE9HX0NPTVBPTkVOVFMnXVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUxvZ0ZpbHRlckZyb21FbnYoKTogUHJvdmlkZXIge1xuICBjb25zb2xlLndhcm4oJ1tERVBSRUNBVEVEXSBwcm92aWRlTG9nRmlsdGVyRnJvbUVudigpIGlzIGRlcHJlY2F0ZWQuIFVzZSBwcm92aWRlTG9nRmlsdGVyV2l0aENvbmZpZygpIGluc3RlYWQuJyk7XG4gIHJldHVybiBwcm92aWRlTG9nRmlsdGVyV2l0aENvbmZpZygpO1xufVxuIl19","import { inject, Injectable, InjectionToken } from \"@angular/core\";\nimport { LOGGER, LogLevel, LOG_FILTER } from \"@nx-ddd/logging/base\";\nimport * as i0 from \"@angular/core\";\nexport const LOGGING_SERVICE = new InjectionToken('LoggingService');\nexport class LoggingService {\n loggers = inject(LOGGER, { optional: true }) ?? [];\n filter = inject(LOG_FILTER, { optional: true });\n getLogger(name) {\n const format = (...args) => {\n return args.map(arg => {\n if (typeof arg === 'string')\n return arg;\n if (arg === undefined)\n return 'undefined';\n if (arg === null)\n return 'null';\n const serialized = JSON.stringify(arg);\n return serialized !== undefined ? serialized : String(arg);\n }).join(' ');\n };\n return {\n log: (...args) => this.log(LogLevel.DEBUG, format(`[${name}]`, ...args)),\n debug: (...args) => this.log(LogLevel.DEBUG, format(`[${name}]`, ...args)),\n info: (...args) => this.log(LogLevel.INFO, format(`[${name}]`, ...args)),\n warn: (...args) => this.log(LogLevel.WARN, format(`[${name}]`, ...args)),\n error: (...args) => this.log(LogLevel.ERROR, format(`[${name}]`, ...args)),\n };\n }\n log(level, message, context, error) {\n // Apply filtering at service level if LogFilter is provided\n if (this.filter && !this.filter(level, context))\n return;\n this.loggers.forEach(logger => logger.log(level, message, context, error));\n }\n close() {\n this.loggers.forEach(logger => logger.close());\n }\n debug(message, context) {\n this.log(LogLevel.DEBUG, message, context);\n }\n info(message, context) {\n this.log(LogLevel.INFO, message, context);\n }\n warn(message, context) {\n this.log(LogLevel.WARN, message, context);\n }\n error(message, error, context) {\n this.log(LogLevel.ERROR, message, context, error);\n }\n fatal(message, error, context) {\n this.log(LogLevel.FATAL, message, context, error);\n }\n setLogLevel(_level) {\n // this.loggers.forEach(logger => logger.setLogLevel(level));\n }\n setComponent(_component) {\n // this.loggers.forEach(logger => logger.setComponent(component));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: LoggingService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: LoggingService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9sb2dnaW5nL3NyYy9saWIvbG9nZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQTJDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFlLE1BQU0sc0JBQXNCLENBQUM7O0FBRTFILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBa0IsZ0JBQWdCLENBQUMsQ0FBQztBQVdyRixNQUFNLE9BQU8sY0FBYztJQUNqQixPQUFPLEdBQUcsTUFBTSxDQUFlLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqRSxNQUFNLEdBQUcsTUFBTSxDQUFjLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXJFLFNBQVMsQ0FBQyxJQUFZO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxJQUF1QyxFQUFFLEVBQUU7WUFDNUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7b0JBQUUsT0FBTyxHQUFHLENBQUM7Z0JBQ3hDLElBQUksR0FBRyxLQUFLLFNBQVM7b0JBQUUsT0FBTyxXQUFXLENBQUM7Z0JBQzFDLElBQUksR0FBRyxLQUFLLElBQUk7b0JBQUUsT0FBTyxNQUFNLENBQUM7Z0JBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMs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QUVELFdBQVcsQ0FBQyxNQUFnQjtRQUMxQiw2REFBNkQ7SUFDL0QsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFrQjtRQUM3QixrRUFBa0U7SUFDcEUsQ0FBQzt1R0E3RFUsY0FBYzsyR0FBZCxjQUFjLGNBREQsTUFBTTs7MkZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBCYXNlTG9nZ2VyLCBJTG9nZ2luZ1NlcnZpY2UsIExvZ0NvbnRleHQsIExPR0dFUiwgTG9nTGV2ZWwsIExPR19GSUxURVIsIExvZ0ZpbHRlckZuIH0gZnJvbSBcIkBueC1kZGQvbG9nZ2luZy9iYXNlXCI7XG5cbmV4cG9ydCBjb25zdCBMT0dHSU5HX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48SUxvZ2dpbmdTZXJ2aWNlPignTG9nZ2luZ1NlcnZpY2UnKTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xuICBsb2c6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjb25zb2xlWydsb2cnXT4pID0+IHZvaWQ7XG4gIGRlYnVnOiAoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY29uc29sZVsnZGVidWcnXT4pID0+IHZvaWQ7XG4gIGluZm86ICguLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjb25zb2xlWydpbmZvJ10+KSA9PiB2b2lkO1xuICB3YXJuOiAoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgY29uc29sZVsnd2FybiddPikgPT4gdm9pZDtcbiAgZXJyb3I6ICguLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBjb25zb2xlWydlcnJvciddPikgPT4gdm9pZDtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMb2dnaW5nU2VydmljZSBpbXBsZW1lbnRzIElMb2dnaW5nU2VydmljZSB7XG4gIHByaXZhdGUgbG9nZ2VycyA9IGluamVjdDxCYXNlTG9nZ2VyW10+KExPR0dFUiwgeyBvcHRpb25hbDogdHJ1ZSB9KSA/PyBbXTtcbiAgcHJpdmF0ZSBmaWx0ZXIgPSBpbmplY3Q8TG9nRmlsdGVyRm4+KExPR19GSUxURVIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgZ2V0TG9nZ2VyKG5hbWU6IHN0cmluZyk6IExvZ2dlciB7XG4gICAgY29uc3QgZm9ybWF0ID0gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGNvbnNvbGVbJ2xvZyddPikgPT4ge1xuICAgICAgcmV0dXJuIGFyZ3MubWFwKGFyZyA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykgcmV0dXJuIGFyZztcbiAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgICAgIGlmIChhcmcgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBKU09OLnN0cmluZ2lmeShhcmcpO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplZCAhPT0gdW5kZWZpbmVkID8gc2VyaWFsaXplZCA6IFN0cmluZyhhcmcpO1xuICAgICAgfSkuam9pbignICcpO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9nOiAoLi4uYXJncykgPT4gdGhpcy5sb2coTG9nTGV2ZWwuREVCVUcsIGZvcm1hdChgWyR7bmFtZX1dYCwgLi4uYXJncykpLFxuICAgICAgZGVidWc6ICguLi5hcmdzKSA9PiB0aGlzLmxvZyhMb2dMZXZlbC5ERUJVRywgZm9ybWF0KGBbJHtuYW1lfV1gLCAuLi5hcmdzKSksXG4gICAgICBpbmZvOiAoLi4uYXJncykgPT4gdGhpcy5sb2coTG9nTGV2ZWwuSU5GTywgZm9ybWF0KGBbJHtuYW1lfV1gLCAuLi5hcmdzKSksXG4gICAgICB3YXJuOiAoLi4uYXJncykgPT4gdGhpcy5sb2coTG9nTGV2ZWwuV0FSTiwgZm9ybWF0KGBbJHtuYW1lfV1gLCAuLi5hcmdzKSksXG4gICAgICBlcnJvcjogKC4uLmFyZ3MpID0+IHRoaXMubG9nKExvZ0xldmVsLkVSUk9SLCBmb3JtYXQoYFske25hbWV9XWAsIC4uLmFyZ3MpKSxcbiAgICB9O1xuICB9XG5cbiAgbG9nKGxldmVsOiBMb2dMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogTG9nQ29udGV4dCwgZXJyb3I/OiBFcnJvcik6IHZvaWQge1xuICAgIC8vIEFwcGx5IGZpbHRlcmluZyBhdCBzZXJ2aWNlIGxldmVsIGlmIExvZ0ZpbHRlciBpcyBwcm92aWRlZFxuICAgIGlmICh0aGlzLmZpbHRlciAmJiAhdGhpcy5maWx0ZXIobGV2ZWwsIGNvbnRleHQpKSByZXR1cm47XG5cbiAgICB0aGlzLmxvZ2dlcnMuZm9yRWFjaChsb2dnZXIgPT4gbG9nZ2VyLmxvZyhsZXZlbCwgbWVzc2FnZSwgY29udGV4dCwgZXJyb3IpKTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2Vycy5mb3JFYWNoKGxvZ2dlciA9PiBsb2dnZXIuY2xvc2UoKSk7XG4gIH1cblxuICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5sb2coTG9nTGV2ZWwuREVCVUcsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICB9XG5cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiBMb2dDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5sb2coTG9nTGV2ZWwuSU5GTywgbWVzc2FnZSwgY29udGV4dCk7XG4gIH1cblxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IExvZ0NvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5XQVJOLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I/OiBFcnJvciwgY29udGV4dD86IExvZ0NvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZyhMb2dMZXZlbC5FUlJPUiwgbWVzc2FnZSwgY29udGV4dCwgZXJyb3IpO1xuICB9XG5cbiAgZmF0YWwobWVzc2FnZTogc3RyaW5nLCBlcnJvcj86IEVycm9yLCBjb250ZXh0PzogTG9nQ29udGV4dCk6IHZvaWQge1xuICAgIHRoaXMubG9nKExvZ0xldmVsLkZBVEFMLCBtZXNzYWdlLCBjb250ZXh0LCBlcnJvcik7XG4gIH1cblxuICBzZXRMb2dMZXZlbChfbGV2ZWw6IExvZ0xldmVsKTogdm9pZCB7XG4gICAgLy8gdGhpcy5sb2dnZXJzLmZvckVhY2gobG9nZ2VyID0+IGxvZ2dlci5zZXRMb2dMZXZlbChsZXZlbCkpO1xuICB9XG5cbiAgc2V0Q29tcG9uZW50KF9jb21wb25lbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIHRoaXMubG9nZ2Vycy5mb3JFYWNoKGxvZ2dlciA9PiBsb2dnZXIuc2V0Q29tcG9uZW50KGNvbXBvbmVudCkpO1xuICB9XG59XG4iXX0=","import { inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\nimport { LoggingService } from './logging.service';\nlet globalLogging = null;\nexport { globalLogging as logging };\nexport function setGlobalLogging(logging) {\n globalLogging = logging;\n}\nexport function getGlobalLogging() {\n return globalLogging;\n}\nexport function createLogger(name) {\n return globalLogging;\n}\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => { };\nconst noopLogger = { log: noop, debug: noop, info: noop, warn: noop, error: noop };\nexport function getLogger(name) {\n return globalLogging?.getLogger(name) ?? noopLogger;\n}\nexport function provideGlobalLogging() {\n return makeEnvironmentProviders([\n provideAppInitializer(() => {\n return setGlobalLogging(inject(LoggingService));\n })\n ]);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWxvZ2dpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2xvZ2dpbmcvc3JjL2xpYi9nbG9iYWwtbG9nZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RyxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFM0QsSUFBSSxhQUFhLEdBQTBCLElBQUksQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRXBDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUF1QjtJQUN0RCxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQVM7SUFDcEMsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7QUFDdEIsTUFBTSxVQUFVLEdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUUzRixNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVk7SUFDcEMsT0FBTyxhQUFhLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQztBQUN0RCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxPQUFPLHdCQUF3QixDQUFDO1FBQzlCLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN6QixPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgaW5qZWN0LCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsIHByb3ZpZGVBcHBJbml0aWFsaXplciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUxvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnQG54LWRkZC9sb2dnaW5nL2Jhc2UnO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nU2VydmljZSB9IGZyb20gJy4vbG9nZ2luZy5zZXJ2aWNlJztcblxubGV0IGdsb2JhbExvZ2dpbmc6IExvZ2dpbmdTZXJ2aWNlIHwgbnVsbCA9IG51bGw7XG5leHBvcnQgeyBnbG9iYWxMb2dnaW5nIGFzIGxvZ2dpbmcgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEdsb2JhbExvZ2dpbmcobG9nZ2luZzogTG9nZ2luZ1NlcnZpY2UpOiB2b2lkIHtcbiAgZ2xvYmFsTG9nZ2luZyA9IGxvZ2dpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxMb2dnaW5nKCk6IExvZ2dpbmdTZXJ2aWNlIHwgbnVsbCB7XG4gIHJldHVybiBnbG9iYWxMb2dnaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKG5hbWU6IGFueSk6IElMb2dnaW5nU2VydmljZSB7XG4gIHJldHVybiBnbG9iYWxMb2dnaW5nO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG5jb25zdCBub29wID0gKCkgPT4ge307XG5jb25zdCBub29wTG9nZ2VyOiBMb2dnZXIgPSB7IGxvZzogbm9vcCwgZGVidWc6IG5vb3AsIGluZm86IG5vb3AsIHdhcm46IG5vb3AsIGVycm9yOiBub29wIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dnZXIobmFtZTogc3RyaW5nKTogTG9nZ2VyIHtcbiAgcmV0dXJuIGdsb2JhbExvZ2dpbmc/LmdldExvZ2dlcihuYW1lKSA/PyBub29wTG9nZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUdsb2JhbExvZ2dpbmcoKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICBwcm92aWRlQXBwSW5pdGlhbGl6ZXIoKCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEdsb2JhbExvZ2dpbmcoaW5qZWN0KExvZ2dpbmdTZXJ2aWNlKSk7XG4gICAgfSlcbiAgXSk7XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWxvZ2dpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2xvZ2dpbmcvc3JjL2xpYi9ueC1kZGQtbG9nZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["LOGGER","LOG_FILTER","LogLevel"],"mappings":"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"}
|
package/file/index.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { LogLevel, BaseLogger, LogContext } from '@nx-ddd/logging/base';
|
|
2
|
+
import { Provider } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* FileLogger implementation for multi-provider logging
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
interface FileLoggerOptions {
|
|
9
|
+
filePath?: string;
|
|
10
|
+
logDir?: string;
|
|
11
|
+
component?: string;
|
|
12
|
+
minLevel?: LogLevel;
|
|
13
|
+
componentFilter?: string;
|
|
14
|
+
}
|
|
15
|
+
declare class FileLogger extends BaseLogger {
|
|
16
|
+
private writeStream;
|
|
17
|
+
private minLevel;
|
|
18
|
+
private componentFilter?;
|
|
19
|
+
private startTime;
|
|
20
|
+
constructor(options?: FileLoggerOptions);
|
|
21
|
+
log(level: LogLevel, message: string, context?: LogContext, error?: Error): void;
|
|
22
|
+
close(): void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Options for provideFileLogger
|
|
26
|
+
*/
|
|
27
|
+
interface FileLoggerProviderOptions {
|
|
28
|
+
component?: string;
|
|
29
|
+
logDir?: string;
|
|
30
|
+
filePath?: string;
|
|
31
|
+
minLevel?: LogLevel;
|
|
32
|
+
componentFilter?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Provide FileLogger with optional configuration
|
|
36
|
+
* @param options - Logger options (minLevel defaults to DEBUG if not specified)
|
|
37
|
+
*/
|
|
38
|
+
declare function provideFileLogger(options?: FileLoggerProviderOptions): Provider;
|
|
39
|
+
|
|
40
|
+
export { FileLogger, provideFileLogger };
|
|
41
|
+
export type { FileLoggerOptions, FileLoggerProviderOptions };
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../../../../packages/@nx-ddd/logging/src/lib/file/file-logger.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAAA;;AAEG;;;;;;;;AAeF;AAED;;;;;;AAoCE;AAyBA;AAMD;AAED;;AAEG;;;;;;;AAOF;AAED;;;AAGG;AACH;;;"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Provider, EnvironmentProviders } from '@angular/core';
|
|
3
|
+
import { ILoggingService as ILoggingService$1, LogLevel as LogLevel$1, LogContext as LogContext$1 } from '@nx-ddd/logging/base';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* LoggingService interfaces
|
|
7
|
+
*
|
|
8
|
+
* Provides structured logging with different log levels and file output
|
|
9
|
+
*/
|
|
10
|
+
declare enum LogLevel {
|
|
11
|
+
DEBUG = 0,
|
|
12
|
+
INFO = 1,
|
|
13
|
+
WARN = 2,
|
|
14
|
+
ERROR = 3,
|
|
15
|
+
FATAL = 4
|
|
16
|
+
}
|
|
17
|
+
interface LogContext {
|
|
18
|
+
component?: string;
|
|
19
|
+
sessionId?: string;
|
|
20
|
+
clientId?: string;
|
|
21
|
+
[key: string]: any;
|
|
22
|
+
}
|
|
23
|
+
interface ILoggingService {
|
|
24
|
+
/**
|
|
25
|
+
* Log debug message (for development/troubleshooting)
|
|
26
|
+
*/
|
|
27
|
+
debug(message: string, context?: LogContext): void;
|
|
28
|
+
/**
|
|
29
|
+
* Log informational message
|
|
30
|
+
*/
|
|
31
|
+
info(message: string, context?: LogContext): void;
|
|
32
|
+
/**
|
|
33
|
+
* Log warning message
|
|
34
|
+
*/
|
|
35
|
+
warn(message: string, context?: LogContext): void;
|
|
36
|
+
/**
|
|
37
|
+
* Log error message
|
|
38
|
+
*/
|
|
39
|
+
error(message: string, error?: Error, context?: LogContext): void;
|
|
40
|
+
/**
|
|
41
|
+
* Log fatal error message (application cannot continue)
|
|
42
|
+
*/
|
|
43
|
+
fatal(message: string, error?: Error, context?: LogContext): void;
|
|
44
|
+
/**
|
|
45
|
+
* Set log level filter
|
|
46
|
+
*/
|
|
47
|
+
setLogLevel(level: LogLevel): void;
|
|
48
|
+
/**
|
|
49
|
+
* Set component name for this logger
|
|
50
|
+
*/
|
|
51
|
+
setComponent(component: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Close logger and flush buffers
|
|
54
|
+
*/
|
|
55
|
+
close(): void;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Base Logger class for multi-provider logging system
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
declare const LOGGER: InjectionToken<BaseLogger>;
|
|
63
|
+
declare abstract class BaseLogger {
|
|
64
|
+
/**
|
|
65
|
+
* Main log method that all loggers must implement
|
|
66
|
+
*/
|
|
67
|
+
abstract log(level: LogLevel, message: string, context?: LogContext, error?: Error): void;
|
|
68
|
+
/**
|
|
69
|
+
* Close logger and flush buffers
|
|
70
|
+
*/
|
|
71
|
+
abstract close(): void;
|
|
72
|
+
debug(message: string, context?: LogContext): void;
|
|
73
|
+
info(message: string, context?: LogContext): void;
|
|
74
|
+
warn(message: string, context?: LogContext): void;
|
|
75
|
+
error(message: string, error?: Error, context?: LogContext): void;
|
|
76
|
+
fatal(message: string, error?: Error, context?: LogContext): void;
|
|
77
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseLogger, never>;
|
|
78
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<BaseLogger>;
|
|
79
|
+
}
|
|
80
|
+
declare function provideLogger(useFactory: () => BaseLogger): Provider;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* LogFilter - Simple function-based log filtering
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Log filter function type
|
|
88
|
+
* @param level - The log level
|
|
89
|
+
* @param context - Optional log context (component name, etc.)
|
|
90
|
+
* @returns true if the log should be output, false to suppress
|
|
91
|
+
*/
|
|
92
|
+
type LogFilterFn = (level: LogLevel, context?: LogContext) => boolean;
|
|
93
|
+
declare const LOG_FILTER: InjectionToken<LogFilterFn>;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Provider functions for log filtering
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Provide a log filter function
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* // Filter by log level
|
|
104
|
+
* provideLogFilter((level) => level >= LogLevel.WARN)
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* // Filter by component
|
|
108
|
+
* provideLogFilter((level, context) => context?.component?.startsWith('My'))
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* // Allow all logs
|
|
112
|
+
* provideLogFilter(() => true)
|
|
113
|
+
*/
|
|
114
|
+
declare function provideLogFilter(filter: LogFilterFn): Provider;
|
|
115
|
+
/**
|
|
116
|
+
* Configuration for log filtering
|
|
117
|
+
*/
|
|
118
|
+
interface LogFilterConfig {
|
|
119
|
+
minLevel?: LogLevel;
|
|
120
|
+
componentPattern?: string;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Provide a log filter with explicit configuration
|
|
124
|
+
* @param config - Filter configuration (minLevel defaults to WARN)
|
|
125
|
+
*/
|
|
126
|
+
declare function provideLogFilterWithConfig(config?: LogFilterConfig): Provider;
|
|
127
|
+
/**
|
|
128
|
+
* @deprecated Use provideLogFilterWithConfig() instead.
|
|
129
|
+
* This function directly accesses process.env which violates the rule
|
|
130
|
+
* that packages should not access environment variables directly.
|
|
131
|
+
*
|
|
132
|
+
* Migration example:
|
|
133
|
+
* ```typescript
|
|
134
|
+
* // Before (in packages)
|
|
135
|
+
* provideLogFilterFromEnv()
|
|
136
|
+
*
|
|
137
|
+
* // After (in application layer)
|
|
138
|
+
* provideLogFilterWithConfig({
|
|
139
|
+
* minLevel: process.env['LOG_LEVEL'] ? LogLevel[process.env['LOG_LEVEL'].toUpperCase()] : undefined,
|
|
140
|
+
* componentPattern: process.env['LOG_COMPONENTS']
|
|
141
|
+
* })
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
declare function provideLogFilterFromEnv(): Provider;
|
|
145
|
+
|
|
146
|
+
declare const LOGGING_SERVICE: InjectionToken<ILoggingService$1>;
|
|
147
|
+
interface Logger {
|
|
148
|
+
log: (...args: Parameters<typeof console['log']>) => void;
|
|
149
|
+
debug: (...args: Parameters<typeof console['debug']>) => void;
|
|
150
|
+
info: (...args: Parameters<typeof console['info']>) => void;
|
|
151
|
+
warn: (...args: Parameters<typeof console['warn']>) => void;
|
|
152
|
+
error: (...args: Parameters<typeof console['error']>) => void;
|
|
153
|
+
}
|
|
154
|
+
declare class LoggingService implements ILoggingService$1 {
|
|
155
|
+
private loggers;
|
|
156
|
+
private filter;
|
|
157
|
+
getLogger(name: string): Logger;
|
|
158
|
+
log(level: LogLevel$1, message: string, context?: LogContext$1, error?: Error): void;
|
|
159
|
+
close(): void;
|
|
160
|
+
debug(message: string, context?: LogContext$1): void;
|
|
161
|
+
info(message: string, context?: LogContext$1): void;
|
|
162
|
+
warn(message: string, context?: LogContext$1): void;
|
|
163
|
+
error(message: string, error?: Error, context?: LogContext$1): void;
|
|
164
|
+
fatal(message: string, error?: Error, context?: LogContext$1): void;
|
|
165
|
+
setLogLevel(_level: LogLevel$1): void;
|
|
166
|
+
setComponent(_component: string): void;
|
|
167
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LoggingService, never>;
|
|
168
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<LoggingService>;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
declare let globalLogging: LoggingService | null;
|
|
172
|
+
|
|
173
|
+
declare function setGlobalLogging(logging: LoggingService): void;
|
|
174
|
+
declare function getGlobalLogging(): LoggingService | null;
|
|
175
|
+
declare function createLogger(name: any): ILoggingService$1;
|
|
176
|
+
declare function getLogger(name: string): Logger;
|
|
177
|
+
declare function provideGlobalLogging(): EnvironmentProviders;
|
|
178
|
+
|
|
179
|
+
export { BaseLogger, LOGGER, LOGGING_SERVICE, LOG_FILTER, LogLevel, LoggingService, createLogger, getGlobalLogging, getLogger, globalLogging as logging, provideGlobalLogging, provideLogFilter, provideLogFilterFromEnv, provideLogFilterWithConfig, provideLogger, setGlobalLogging };
|
|
180
|
+
export type { ILoggingService, LogContext, LogFilterConfig, LogFilterFn, Logger };
|
|
181
|
+
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../../../packages/@nx-ddd/logging/src/lib/base/interfaces.ts","../../../../packages/@nx-ddd/logging/src/lib/base/base.logger.ts","../../../../packages/@nx-ddd/logging/src/lib/base/log-filter.ts","../../../../packages/@nx-ddd/logging/src/lib/base/providers.ts","../../../../packages/@nx-ddd/logging/src/lib/logging.service.ts","../../../../packages/@nx-ddd/logging/src/lib/global-logging.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAEH;AACE;AACA;AACA;AACA;AACA;AACD;;;;;AAMC;AACD;;AAGC;;AAEG;;AAGH;;AAEG;;AAGH;;AAEG;;AAGH;;AAEG;AACH;AAEA;;AAEG;AACH;AAEA;;AAEG;AACH;AAEA;;AAEG;AACH;AAEA;;AAEG;;AAEJ;;AC7DD;;AAEG;;AAKH;AAEA;AAEE;;AAEG;;AAQH;;AAEG;;;;;AAgBH;AAIA;;;AAGD;AAED;;AChDA;;AAEG;;AAKH;;;;;AAKG;AACG;AAEN;;ACfA;;AAEG;;AAMH;;;;;;;;;;;;;;AAcG;AACH;AAIA;;AAEG;;;;AAIF;AAED;;;AAGG;AACH;AAaA;;;;;;;;;;;;;;;;AAgBG;AACH;;AClEA;;AAGE;AACA;AACA;AACA;AACA;AACD;AAED;;;AAKE;AAoBA;AAOA;;;;AAgBA;AAIA;AAIA;AAIA;;;AAGD;;ACxED;;AAGA;AAIA;AAIA;AAQA;AAIA;;;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nx-ddd/logging",
|
|
3
|
+
"version": "19.24.1",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"peerDependencies": {
|
|
6
|
+
"@angular/core": "19.1.4"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"tslib": "^2.3.0"
|
|
10
|
+
},
|
|
11
|
+
"module": "fesm2022/nx-ddd-logging.mjs",
|
|
12
|
+
"typings": "index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
"./package.json": {
|
|
15
|
+
"default": "./package.json"
|
|
16
|
+
},
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./index.d.ts",
|
|
19
|
+
"default": "./fesm2022/nx-ddd-logging.mjs"
|
|
20
|
+
},
|
|
21
|
+
"./base": {
|
|
22
|
+
"types": "./base/index.d.ts",
|
|
23
|
+
"default": "./fesm2022/nx-ddd-logging-base.mjs"
|
|
24
|
+
},
|
|
25
|
+
"./console": {
|
|
26
|
+
"types": "./console/index.d.ts",
|
|
27
|
+
"default": "./fesm2022/nx-ddd-logging-console.mjs"
|
|
28
|
+
},
|
|
29
|
+
"./file": {
|
|
30
|
+
"types": "./file/index.d.ts",
|
|
31
|
+
"default": "./fesm2022/nx-ddd-logging-file.mjs"
|
|
32
|
+
},
|
|
33
|
+
"./tee": {
|
|
34
|
+
"types": "./tee/index.d.ts",
|
|
35
|
+
"default": "./fesm2022/nx-ddd-logging-tee.mjs"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"sideEffects": false
|
|
39
|
+
}
|
package/tee/index.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BaseLogger, LogLevel } from '@nx-ddd/logging/base';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { Provider } from '@angular/core';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* TeeLogger - ファイルとコンソール両方にログを出力(BaseLogger継承版)
|
|
7
|
+
*
|
|
8
|
+
* BaseLoggerを継承することでLoggingServiceのmulti-providerチェーンに統合可能。
|
|
9
|
+
* console.logのオーバーライドを廃止し、正規のLoggingService経由でログレベルを保持する。
|
|
10
|
+
*
|
|
11
|
+
* - initialize() なし: コンソールのみ出力(ConsoleLogger と同等)
|
|
12
|
+
* - initialize(logFile): コンソール + ファイル出力
|
|
13
|
+
* - E2E 時は FileLogger を使用するため、TeeLogger は常にコンソール出力が有効
|
|
14
|
+
*/
|
|
15
|
+
declare class TeeLogger extends BaseLogger {
|
|
16
|
+
private logStream;
|
|
17
|
+
private enableConsoleOutput;
|
|
18
|
+
initialize(logFilePath: string, forceConsole?: boolean, options?: {
|
|
19
|
+
isE2e?: boolean;
|
|
20
|
+
}): void;
|
|
21
|
+
log(level: LogLevel, message: string): void;
|
|
22
|
+
close(): void;
|
|
23
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TeeLogger, never>;
|
|
24
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TeeLogger>;
|
|
25
|
+
}
|
|
26
|
+
declare function provideTeeLogger(): Provider[];
|
|
27
|
+
|
|
28
|
+
export { TeeLogger, provideTeeLogger };
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../../../../packages/@nx-ddd/logging/src/lib/tee/tee.logger.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;AASG;AACH,cAAA,SAAA,SAAA,UAAA;;;;;AAKqF;;AAsBnF;;;AAMD;AAED,iBAAA,gBAAA,IAAA,QAAA;;;;"}
|