ionic-logging-service 16.0.0 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +3 -1
  2. package/esm2022/lib/ajax-appender.model.mjs +149 -0
  3. package/esm2022/lib/local-storage-appender.model.mjs +177 -0
  4. package/esm2022/lib/log-level.converter.mjs +92 -0
  5. package/esm2022/lib/logger.model.mjs +191 -0
  6. package/{esm2020 → esm2022}/lib/logging-service.module.mjs +5 -5
  7. package/esm2022/lib/logging.service.mjs +167 -0
  8. package/esm2022/lib/memory-appender.model.mjs +133 -0
  9. package/{fesm2015 → fesm2022}/ionic-logging-service.mjs +15 -15
  10. package/{fesm2020 → fesm2022}/ionic-logging-service.mjs.map +1 -1
  11. package/package.json +7 -13
  12. package/esm2020/lib/ajax-appender.model.mjs +0 -149
  13. package/esm2020/lib/local-storage-appender.model.mjs +0 -177
  14. package/esm2020/lib/log-level.converter.mjs +0 -92
  15. package/esm2020/lib/logger.model.mjs +0 -191
  16. package/esm2020/lib/logging.service.mjs +0 -167
  17. package/esm2020/lib/memory-appender.model.mjs +0 -133
  18. package/fesm2015/ionic-logging-service.mjs.map +0 -1
  19. package/fesm2020/ionic-logging-service.mjs +0 -992
  20. /package/{esm2020 → esm2022}/ionic-logging-service.mjs +0 -0
  21. /package/{esm2020 → esm2022}/lib/ajax-appender.configuration.mjs +0 -0
  22. /package/{esm2020 → esm2022}/lib/browser-console-appender.configuration.mjs +0 -0
  23. /package/{esm2020 → esm2022}/lib/json-layout.model.mjs +0 -0
  24. /package/{esm2020 → esm2022}/lib/local-storage-appender.configuration.mjs +0 -0
  25. /package/{esm2020 → esm2022}/lib/log-level.model.mjs +0 -0
  26. /package/{esm2020 → esm2022}/lib/log-message.model.mjs +0 -0
  27. /package/{esm2020 → esm2022}/lib/logging-service.configuration.mjs +0 -0
  28. /package/{esm2020 → esm2022}/lib/memory-appender.configuration.mjs +0 -0
  29. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -0,0 +1,191 @@
1
+ import * as log4javascript from "log4javascript";
2
+ import { LogLevelConverter } from "./log-level.converter";
3
+ /**
4
+ * Logger for writing log messages.
5
+ */
6
+ export class Logger {
7
+ /**
8
+ * Creates a new instance of a logger.
9
+ */
10
+ constructor(logger) {
11
+ if (typeof logger === "undefined") {
12
+ this.logger = log4javascript.getRootLogger();
13
+ }
14
+ else if (typeof logger === "string") {
15
+ this.logger = log4javascript.getLogger(logger);
16
+ }
17
+ else {
18
+ this.logger = logger;
19
+ }
20
+ }
21
+ /**
22
+ * Get the log level.
23
+ */
24
+ getLogLevel() {
25
+ return LogLevelConverter.levelFromLog4Javascript(this.logger.getLevel());
26
+ }
27
+ /**
28
+ * Set the log level.
29
+ *
30
+ * @param level the new log level
31
+ */
32
+ setLogLevel(level) {
33
+ this.logger.setLevel(LogLevelConverter.levelToLog4Javascript(level));
34
+ }
35
+ /**
36
+ * Logs a message at level TRACE.
37
+ *
38
+ * @param methodName name of the method
39
+ * @param params optional parameters to be logged; objects will be formatted as JSON
40
+ */
41
+ trace(methodName, ...params) {
42
+ if (this.logger.isTraceEnabled()) {
43
+ const args = [methodName];
44
+ for (const param of params) {
45
+ args.push(this.formatArgument(param));
46
+ }
47
+ this.logger.trace.apply(this.logger, args);
48
+ }
49
+ }
50
+ /**
51
+ * Logs a message at level DEBUG.
52
+ *
53
+ * @param methodName name of the method
54
+ * @param params optional parameters to be logged; objects will be formatted as JSON
55
+ */
56
+ debug(methodName, ...params) {
57
+ if (this.logger.isDebugEnabled()) {
58
+ const args = [methodName];
59
+ for (const param of params) {
60
+ args.push(this.formatArgument(param));
61
+ }
62
+ this.logger.debug.apply(this.logger, args);
63
+ }
64
+ }
65
+ /**
66
+ * Logs a message at level INFO.
67
+ *
68
+ * @param methodName name of the method
69
+ * @param params optional parameters to be logged; objects will be formatted as JSON
70
+ */
71
+ info(methodName, ...params) {
72
+ if (this.logger.isInfoEnabled()) {
73
+ const args = [methodName];
74
+ for (const param of params) {
75
+ args.push(this.formatArgument(param));
76
+ }
77
+ this.logger.info.apply(this.logger, args);
78
+ }
79
+ }
80
+ /**
81
+ * Logs a message at level WARN.
82
+ *
83
+ * @param methodName name of the method
84
+ * @param params optional parameters to be logged; objects will be formatted as JSON
85
+ */
86
+ warn(methodName, ...params) {
87
+ if (this.logger.isWarnEnabled()) {
88
+ const args = [methodName];
89
+ for (const param of params) {
90
+ args.push(this.formatArgument(param));
91
+ }
92
+ this.logger.warn.apply(this.logger, args);
93
+ }
94
+ }
95
+ /**
96
+ * Logs a message at level ERROR.
97
+ *
98
+ * @param methodName name of the method
99
+ * @param params optional parameters to be logged; objects will be formatted as JSON
100
+ */
101
+ error(methodName, ...params) {
102
+ if (this.logger.isErrorEnabled()) {
103
+ const args = [methodName];
104
+ for (const param of params) {
105
+ args.push(this.formatArgument(param));
106
+ }
107
+ this.logger.error.apply(this.logger, args);
108
+ }
109
+ }
110
+ /**
111
+ * Logs a message at level FATAL.
112
+ *
113
+ * @param methodName name of the method
114
+ * @param params optional parameters to be logged; objects will be formatted as JSON
115
+ */
116
+ fatal(methodName, ...params) {
117
+ if (this.logger.isFatalEnabled()) {
118
+ const args = [methodName];
119
+ for (const param of params) {
120
+ args.push(this.formatArgument(param));
121
+ }
122
+ this.logger.fatal.apply(this.logger, args);
123
+ }
124
+ }
125
+ /**
126
+ * Logs the entry into a method.
127
+ * The method name will be logged at level INFO, the parameters at level DEBUG.
128
+ *
129
+ * @param methodName name of the method
130
+ * @param params optional parameters to be logged; objects will be formatted as JSON
131
+ */
132
+ entry(methodName, ...params) {
133
+ if (this.logger.isInfoEnabled()) {
134
+ const args = [methodName, "entry"];
135
+ if (this.logger.isDebugEnabled()) {
136
+ for (const param of params) {
137
+ args.push(this.formatArgument(param));
138
+ }
139
+ }
140
+ this.logger.info.apply(this.logger, args);
141
+ }
142
+ }
143
+ /**
144
+ * Logs the exit of a method.
145
+ * The method name will be logged at level INFO, the parameters at level DEBUG.
146
+ *
147
+ * @param methodName name of the method
148
+ * @param params optional parameters to be logged; objects will be formatted as JSON
149
+ */
150
+ exit(methodName, ...params) {
151
+ if (this.logger.isInfoEnabled()) {
152
+ const args = [methodName, "exit"];
153
+ if (this.logger.isDebugEnabled()) {
154
+ for (const param of params) {
155
+ args.push(this.formatArgument(param));
156
+ }
157
+ }
158
+ this.logger.info.apply(this.logger, args);
159
+ }
160
+ }
161
+ /**
162
+ * Formats the given argument.
163
+ */
164
+ formatArgument(arg) {
165
+ if (typeof arg === "string") {
166
+ return arg;
167
+ }
168
+ else if (typeof arg === "number") {
169
+ return arg.toString();
170
+ }
171
+ else if (arg instanceof Error) {
172
+ // JSON.stringify() returns here "{ }"
173
+ return arg.toString();
174
+ }
175
+ else {
176
+ try {
177
+ return JSON.stringify(arg);
178
+ }
179
+ catch (e) {
180
+ return e.message;
181
+ }
182
+ }
183
+ }
184
+ /**
185
+ * Returns the internal Logger (for unit tests only).
186
+ */
187
+ getInternalLogger() {
188
+ return this.logger;
189
+ }
190
+ }
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW9uaWMtbG9nZ2luZy1zZXJ2aWNlL3NyYy9saWIvbG9nZ2VyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxjQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQUlsQjs7T0FFRztJQUNILFlBQVksTUFBcUI7UUFDaEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QyxDQUFDO2FBQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN0QixDQUFDO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNqQixPQUFPLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxLQUFlO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLFVBQWtCLEVBQUUsR0FBRyxNQUFhO1FBQ2hELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVB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QUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO1lBQ0YsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsR0FBUTtRQUM3QixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE9BQU8sR0FBRyxDQUFDO1FBQ1osQ0FBQzthQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMsT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkIsQ0FBQzthQUFNLElBQUksR0FBRyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQ2pDLHNDQUFzQztZQUN0QyxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixDQUFDO2FBQU0sQ0FBQztZQUNQLElBQUksQ0FBQztnQkFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xCLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNwQixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBsb2c0amF2YXNjcmlwdCBmcm9tIFwibG9nNGphdmFzY3JpcHRcIjtcblxuaW1wb3J0IHsgTG9nTGV2ZWxDb252ZXJ0ZXIgfSBmcm9tIFwiLi9sb2ctbGV2ZWwuY29udmVydGVyXCI7XG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuL2xvZy1sZXZlbC5tb2RlbFwiO1xuXG4vKipcbiAqIExvZ2dlciBmb3Igd3JpdGluZyBsb2cgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dnZXIge1xuXG5cdHByaXZhdGUgbG9nZ2VyOiBsb2c0amF2YXNjcmlwdC5Mb2dnZXI7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYSBsb2dnZXIuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihsb2dnZXI/OiBzdHJpbmcgfCBhbnkpIHtcblx0XHRpZiAodHlwZW9mIGxvZ2dlciA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhpcy5sb2dnZXIgPSBsb2c0amF2YXNjcmlwdC5nZXRSb290TG9nZ2VyKCk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgbG9nZ2VyID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHR0aGlzLmxvZ2dlciA9IGxvZzRqYXZhc2NyaXB0LmdldExvZ2dlcihsb2dnZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBsb2cgbGV2ZWwuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TG9nTGV2ZWwoKTogTG9nTGV2ZWwge1xuXHRcdHJldHVybiBMb2dMZXZlbENvbnZlcnRlci5sZXZlbEZyb21Mb2c0SmF2YXNjcmlwdCh0aGlzLmxvZ2dlci5nZXRMZXZlbCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGxvZyBsZXZlbC5cblx0ICpcblx0ICogQHBhcmFtIGxldmVsIHRoZSBuZXcgbG9nIGxldmVsXG5cdCAqL1xuXHRwdWJsaWMgc2V0TG9nTGV2ZWwobGV2ZWw6IExvZ0xldmVsKTogdm9pZCB7XG5cdFx0dGhpcy5sb2dnZXIuc2V0TGV2ZWwoTG9nTGV2ZWxDb252ZXJ0ZXIubGV2ZWxUb0xvZzRKYXZhc2NyaXB0KGxldmVsKSk7XG5cdH1cblxuXHQvKipcblx0ICogTG9ncyBhIG1lc3NhZ2UgYXQgbGV2ZWwgVFJBQ0UuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRob2ROYW1lIG5hbWUgb2YgdGhlIG1ldGhvZFxuXHQgKiBAcGFyYW0gcGFyYW1zIG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gYmUgbG9nZ2VkOyBvYmplY3RzIHdpbGwgYmUgZm9ybWF0dGVkIGFzIEpTT05cblx0ICovXG5cdHB1YmxpYyB0cmFjZShtZXRob2ROYW1lOiBzdHJpbmcsIC4uLnBhcmFtczogYW55W10pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2dnZXIuaXNUcmFjZUVuYWJsZWQoKSkge1xuXHRcdFx0Y29uc3QgYXJncyA9IFttZXRob2ROYW1lXTtcblx0XHRcdGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG5cdFx0XHRcdGFyZ3MucHVzaCh0aGlzLmZvcm1hdEFyZ3VtZW50KHBhcmFtKSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmxvZ2dlci50cmFjZS5hcHBseSh0aGlzLmxvZ2dlciwgYXJncyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIExvZ3MgYSBtZXNzYWdlIGF0IGxldmVsIERFQlVHLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kTmFtZSBuYW1lIG9mIHRoZSBtZXRob2Rcblx0ICogQHBhcmFtIHBhcmFtcyBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIGxvZ2dlZDsgb2JqZWN0cyB3aWxsIGJlIGZvcm1hdHRlZCBhcyBKU09OXG5cdCAqL1xuXHRwdWJsaWMgZGVidWcobWV0aG9kTmFtZTogc3RyaW5nLCAuLi5wYXJhbXM6IGFueVtdKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGFyZ3MgPSBbbWV0aG9kTmFtZV07XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuXHRcdFx0XHRhcmdzLnB1c2godGhpcy5mb3JtYXRBcmd1bWVudChwYXJhbSkpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5sb2dnZXIuZGVidWcuYXBwbHkodGhpcy5sb2dnZXIsIGFyZ3MpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2dzIGEgbWVzc2FnZSBhdCBsZXZlbCBJTkZPLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kTmFtZSBuYW1lIG9mIHRoZSBtZXRob2Rcblx0ICogQHBhcmFtIHBhcmFtcyBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIGxvZ2dlZDsgb2JqZWN0cyB3aWxsIGJlIGZvcm1hdHRlZCBhcyBKU09OXG5cdCAqL1xuXHRwdWJsaWMgaW5mbyhtZXRob2ROYW1lOiBzdHJpbmcsIC4uLnBhcmFtczogYW55W10pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2dnZXIuaXNJbmZvRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBhcmdzID0gW21ldGhvZE5hbWVdO1xuXHRcdFx0Zm9yIChjb25zdCBwYXJhbSBvZiBwYXJhbXMpIHtcblx0XHRcdFx0YXJncy5wdXNoKHRoaXMuZm9ybWF0QXJndW1lbnQocGFyYW0pKTtcblx0XHRcdH1cblx0XHRcdHRoaXMubG9nZ2VyLmluZm8uYXBwbHkodGhpcy5sb2dnZXIsIGFyZ3MpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2dzIGEgbWVzc2FnZSBhdCBsZXZlbCBXQVJOLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0aG9kTmFtZSBuYW1lIG9mIHRoZSBtZXRob2Rcblx0ICogQHBhcmFtIHBhcmFtcyBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIGxvZ2dlZDsgb2JqZWN0cyB3aWxsIGJlIGZvcm1hdHRlZCBhcyBKU09OXG5cdCAqL1xuXHRwdWJsaWMgd2FybihtZXRob2ROYW1lOiBzdHJpbmcsIC4uLnBhcmFtczogYW55W10pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2dnZXIuaXNXYXJuRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBhcmdzID0gW21ldGhvZE5hbWVdO1xuXHRcdFx0Zm9yIChjb25zdCBwYXJhbSBvZiBwYXJhbXMpIHtcblx0XHRcdFx0YXJncy5wdXNoKHRoaXMuZm9ybWF0QXJndW1lbnQocGFyYW0pKTtcblx0XHRcdH1cblx0XHRcdHRoaXMubG9nZ2VyLndhcm4uYXBwbHkodGhpcy5sb2dnZXIsIGFyZ3MpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2dzIGEgbWVzc2FnZSBhdCBsZXZlbCBFUlJPUi5cblx0ICpcblx0ICogQHBhcmFtIG1ldGhvZE5hbWUgbmFtZSBvZiB0aGUgbWV0aG9kXG5cdCAqIEBwYXJhbSBwYXJhbXMgb3B0aW9uYWwgcGFyYW1ldGVycyB0byBiZSBsb2dnZWQ7IG9iamVjdHMgd2lsbCBiZSBmb3JtYXR0ZWQgYXMgSlNPTlxuXHQgKi9cblx0cHVibGljIGVycm9yKG1ldGhvZE5hbWU6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmxvZ2dlci5pc0Vycm9yRW5hYmxlZCgpKSB7XG5cdFx0XHRjb25zdCBhcmdzID0gW21ldGhvZE5hbWVdO1xuXHRcdFx0Zm9yIChjb25zdCBwYXJhbSBvZiBwYXJhbXMpIHtcblx0XHRcdFx0YXJncy5wdXNoKHRoaXMuZm9ybWF0QXJndW1lbnQocGFyYW0pKTtcblx0XHRcdH1cblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yLmFwcGx5KHRoaXMubG9nZ2VyLCBhcmdzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTG9ncyBhIG1lc3NhZ2UgYXQgbGV2ZWwgRkFUQUwuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRob2ROYW1lIG5hbWUgb2YgdGhlIG1ldGhvZFxuXHQgKiBAcGFyYW0gcGFyYW1zIG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gYmUgbG9nZ2VkOyBvYmplY3RzIHdpbGwgYmUgZm9ybWF0dGVkIGFzIEpTT05cblx0ICovXG5cdHB1YmxpYyBmYXRhbChtZXRob2ROYW1lOiBzdHJpbmcsIC4uLnBhcmFtczogYW55W10pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2dnZXIuaXNGYXRhbEVuYWJsZWQoKSkge1xuXHRcdFx0Y29uc3QgYXJncyA9IFttZXRob2ROYW1lXTtcblx0XHRcdGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG5cdFx0XHRcdGFyZ3MucHVzaCh0aGlzLmZvcm1hdEFyZ3VtZW50KHBhcmFtKSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmxvZ2dlci5mYXRhbC5hcHBseSh0aGlzLmxvZ2dlciwgYXJncyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIExvZ3MgdGhlIGVudHJ5IGludG8gYSBtZXRob2QuXG5cdCAqIFRoZSBtZXRob2QgbmFtZSB3aWxsIGJlIGxvZ2dlZCBhdCBsZXZlbCBJTkZPLCB0aGUgcGFyYW1ldGVycyBhdCBsZXZlbCBERUJVRy5cblx0ICpcblx0ICogQHBhcmFtIG1ldGhvZE5hbWUgbmFtZSBvZiB0aGUgbWV0aG9kXG5cdCAqIEBwYXJhbSBwYXJhbXMgb3B0aW9uYWwgcGFyYW1ldGVycyB0byBiZSBsb2dnZWQ7IG9iamVjdHMgd2lsbCBiZSBmb3JtYXR0ZWQgYXMgSlNPTlxuXHQgKi9cblx0cHVibGljIGVudHJ5KG1ldGhvZE5hbWU6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmxvZ2dlci5pc0luZm9FbmFibGVkKCkpIHtcblx0XHRcdGNvbnN0IGFyZ3MgPSBbbWV0aG9kTmFtZSwgXCJlbnRyeVwiXTtcblx0XHRcdGlmICh0aGlzLmxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG5cdFx0XHRcdFx0YXJncy5wdXNoKHRoaXMuZm9ybWF0QXJndW1lbnQocGFyYW0pKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5sb2dnZXIuaW5mby5hcHBseSh0aGlzLmxvZ2dlciwgYXJncyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIExvZ3MgdGhlIGV4aXQgb2YgYSBtZXRob2QuXG5cdCAqIFRoZSBtZXRob2QgbmFtZSB3aWxsIGJlIGxvZ2dlZCBhdCBsZXZlbCBJTkZPLCB0aGUgcGFyYW1ldGVycyBhdCBsZXZlbCBERUJVRy5cblx0ICpcblx0ICogQHBhcmFtIG1ldGhvZE5hbWUgbmFtZSBvZiB0aGUgbWV0aG9kXG5cdCAqIEBwYXJhbSBwYXJhbXMgb3B0aW9uYWwgcGFyYW1ldGVycyB0byBiZSBsb2dnZWQ7IG9iamVjdHMgd2lsbCBiZSBmb3JtYXR0ZWQgYXMgSlNPTlxuXHQgKi9cblx0cHVibGljIGV4aXQobWV0aG9kTmFtZTogc3RyaW5nLCAuLi5wYXJhbXM6IGFueVtdKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubG9nZ2VyLmlzSW5mb0VuYWJsZWQoKSkge1xuXHRcdFx0Y29uc3QgYXJncyA9IFttZXRob2ROYW1lLCBcImV4aXRcIl07XG5cdFx0XHRpZiAodGhpcy5sb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtcykge1xuXHRcdFx0XHRcdGFyZ3MucHVzaCh0aGlzLmZvcm1hdEFyZ3VtZW50KHBhcmFtKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMubG9nZ2VyLmluZm8uYXBwbHkodGhpcy5sb2dnZXIsIGFyZ3MpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGb3JtYXRzIHRoZSBnaXZlbiBhcmd1bWVudC5cblx0ICovXG5cdHB1YmxpYyBmb3JtYXRBcmd1bWVudChhcmc6IGFueSk6IHN0cmluZyB7XG5cdFx0aWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHJldHVybiBhcmc7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRyZXR1cm4gYXJnLnRvU3RyaW5nKCk7XG5cdFx0fSBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0Ly8gSlNPTi5zdHJpbmdpZnkoKSByZXR1cm5zIGhlcmUgXCJ7IH1cIlxuXHRcdFx0cmV0dXJuIGFyZy50b1N0cmluZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIGUubWVzc2FnZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaW50ZXJuYWwgTG9nZ2VyIChmb3IgdW5pdCB0ZXN0cyBvbmx5KS5cblx0ICovXG5cdHB1YmxpYyBnZXRJbnRlcm5hbExvZ2dlcigpOiBsb2c0amF2YXNjcmlwdC5Mb2dnZXIge1xuXHRcdHJldHVybiB0aGlzLmxvZ2dlcjtcblx0fVxufVxuIl19
@@ -1,11 +1,11 @@
1
1
  import { NgModule } from "@angular/core";
2
2
  import * as i0 from "@angular/core";
3
3
  export class LoggingServiceModule {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingServiceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.2", ngImport: i0, type: LoggingServiceModule }); }
6
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingServiceModule }); }
4
7
  }
5
- LoggingServiceModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoggingServiceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6
- LoggingServiceModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: LoggingServiceModule });
7
- LoggingServiceModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoggingServiceModule });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: LoggingServiceModule, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingServiceModule, decorators: [{
9
9
  type: NgModule,
10
10
  args: [{
11
11
  imports: [],
@@ -13,4 +13,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
13
13
  exports: []
14
14
  }]
15
15
  }] });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1zZXJ2aWNlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lvbmljLWxvZ2dpbmctc2VydmljZS9zcmMvbGliL2xvZ2dpbmctc2VydmljZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFVekMsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtrSEFBcEIsb0JBQW9CO2tIQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFSaEMsUUFBUTttQkFBQztvQkFDVCxPQUFPLEVBQUUsRUFDUjtvQkFDRCxZQUFZLEVBQUUsRUFDYjtvQkFDRCxPQUFPLEVBQUUsRUFDUjtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogW1xuXHRdLFxuXHRkZWNsYXJhdGlvbnM6IFtcblx0XSxcblx0ZXhwb3J0czogW1xuXHRdXG59KVxuZXhwb3J0IGNsYXNzIExvZ2dpbmdTZXJ2aWNlTW9kdWxlIHsgfVxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy1zZXJ2aWNlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lvbmljLWxvZ2dpbmctc2VydmljZS9zcmMvbGliL2xvZ2dpbmctc2VydmljZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFVekMsTUFBTSxPQUFPLG9CQUFvQjs4R0FBcEIsb0JBQW9COytHQUFwQixvQkFBb0I7K0dBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFSaEMsUUFBUTttQkFBQztvQkFDVCxPQUFPLEVBQUUsRUFDUjtvQkFDRCxZQUFZLEVBQUUsRUFDYjtvQkFDRCxPQUFPLEVBQUUsRUFDUjtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogW1xuXHRdLFxuXHRkZWNsYXJhdGlvbnM6IFtcblx0XSxcblx0ZXhwb3J0czogW1xuXHRdXG59KVxuZXhwb3J0IGNsYXNzIExvZ2dpbmdTZXJ2aWNlTW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,167 @@
1
+ import { EventEmitter, Injectable } from "@angular/core";
2
+ import * as log4javascript from "log4javascript";
3
+ import { AjaxAppender } from "./ajax-appender.model";
4
+ import { LocalStorageAppender } from "./local-storage-appender.model";
5
+ import { LogLevelConverter } from "./log-level.converter";
6
+ import { Logger } from "./logger.model";
7
+ import { MemoryAppender } from "./memory-appender.model";
8
+ import * as i0 from "@angular/core";
9
+ /**
10
+ * Service for logging functionality.
11
+ *
12
+ * By default, the following settings are used:
13
+ * - logger: root with level WARN
14
+ * - appender: BrowserConsoleAppender with threshold DEBUG and MemoryAppender with threshold ALL
15
+ *
16
+ * Via [configure](#configure), it is possible to amend these settings.
17
+ */
18
+ export class LoggingService {
19
+ /**
20
+ * Creates a new instance of the service.
21
+ */
22
+ constructor() {
23
+ // prevent log4javascript to show alerts on case of errors
24
+ log4javascript.logLog.setQuietMode(true);
25
+ // create event emitter
26
+ this.logMessagesChanged = new EventEmitter();
27
+ this.ajaxAppenderFailed = new EventEmitter();
28
+ // configure appender
29
+ const logger = log4javascript.getRootLogger();
30
+ logger.setLevel(log4javascript.Level.WARN);
31
+ // browser console appender for debugger
32
+ this.browserConsoleAppender = new log4javascript.BrowserConsoleAppender();
33
+ this.browserConsoleAppender.setLayout(new log4javascript.PatternLayout("%d{HH:mm:ss,SSS} %c %m"));
34
+ this.browserConsoleAppender.setThreshold(log4javascript.Level.ALL);
35
+ logger.addAppender(this.browserConsoleAppender);
36
+ // in-memory appender for display on log messages page
37
+ this.memoryAppender = new MemoryAppender();
38
+ this.memoryAppender.setLayout(new log4javascript.PatternLayout("%d{HH:mm:ss,SSS} %c %m"));
39
+ this.memoryAppender.setOnLogMessagesChangedCallback((message) => {
40
+ this.logMessagesChanged.emit();
41
+ });
42
+ logger.addAppender(this.memoryAppender);
43
+ this.configure();
44
+ }
45
+ /**
46
+ * Configures the logging depending on the given configuration.
47
+ *
48
+ * @param configuration configuration data.
49
+ */
50
+ configure(configuration) {
51
+ if (typeof configuration === "undefined") {
52
+ configuration = {};
53
+ }
54
+ // set log levels
55
+ if (typeof configuration.logLevels !== "undefined") {
56
+ for (const level of configuration.logLevels) {
57
+ let logger;
58
+ if (level.loggerName === "root") {
59
+ logger = log4javascript.getRootLogger();
60
+ }
61
+ else {
62
+ logger = log4javascript.getLogger(level.loggerName);
63
+ }
64
+ try {
65
+ logger.setLevel(LogLevelConverter.levelToLog4Javascript(LogLevelConverter.levelFromString(level.logLevel)));
66
+ }
67
+ catch (e) {
68
+ throw new Error(`invalid log level ${level.logLevel}`);
69
+ }
70
+ }
71
+ }
72
+ // configure AjaxAppender
73
+ if (typeof configuration.ajaxAppender !== "undefined") {
74
+ const ajaxAppender = new AjaxAppender(configuration.ajaxAppender);
75
+ ajaxAppender.appenderFailed.subscribe((message) => {
76
+ this.ajaxAppenderFailed.emit(message);
77
+ });
78
+ log4javascript.getRootLogger().addAppender(ajaxAppender);
79
+ }
80
+ // configure LocalStorageAppender
81
+ if (typeof configuration.localStorageAppender !== "undefined") {
82
+ const localStorageAppender = new LocalStorageAppender(configuration.localStorageAppender);
83
+ log4javascript.getRootLogger().addAppender(localStorageAppender);
84
+ // ensure that an eventual memoryAppender is behind the localStorageAppender
85
+ const appenders = new Logger().getInternalLogger().getEffectiveAppenders();
86
+ const memoryAppender = appenders.find((a) => a.toString() === "Ionic.Logging.MemoryAppender");
87
+ if (memoryAppender) {
88
+ log4javascript.getRootLogger().removeAppender(memoryAppender);
89
+ log4javascript.getRootLogger().addAppender(memoryAppender);
90
+ }
91
+ }
92
+ // configure MemoryAppender
93
+ if (configuration.memoryAppender) {
94
+ this.memoryAppender.configure(configuration.memoryAppender);
95
+ }
96
+ // configure BrowserConsoleAppender
97
+ if (configuration.browserConsoleAppender) {
98
+ if (configuration.browserConsoleAppender.threshold) {
99
+ const convertedThreshold = LogLevelConverter.levelToLog4Javascript(LogLevelConverter.levelFromString(configuration.browserConsoleAppender.threshold));
100
+ this.browserConsoleAppender.setThreshold(convertedThreshold);
101
+ }
102
+ }
103
+ }
104
+ /**
105
+ * Gets the root logger from which all other loggers derive.
106
+ *
107
+ * @return root logger
108
+ */
109
+ getRootLogger() {
110
+ return new Logger();
111
+ }
112
+ /**
113
+ * Gets a logger with the specified name, creating it if a logger with that name does not already exist.
114
+ *
115
+ * @param loggerName name of the logger
116
+ * @return logger
117
+ */
118
+ getLogger(loggerName) {
119
+ return new Logger(loggerName);
120
+ }
121
+ /**
122
+ * Gets the last log messages.
123
+ *
124
+ * The log messages are retrieved from the internal [MemoryAppender](../memoryappender.html).
125
+ * That means you will get only the most current messages. The number of the messages is limited
126
+ * by its maxMessages value.
127
+ *
128
+ * @return log messages
129
+ */
130
+ getLogMessages() {
131
+ return this.memoryAppender.getLogMessages();
132
+ }
133
+ /**
134
+ * Loads the log messages written by the LocalStorageAppender with the given key.
135
+ *
136
+ * @param localStorageKey key for the local storage
137
+ * @returns log messages
138
+ */
139
+ getLogMessagesFromLocalStorage(localStorageKey) {
140
+ return LocalStorageAppender.loadLogMessages(localStorageKey);
141
+ }
142
+ /**
143
+ * Remove all log messages.
144
+ */
145
+ removeLogMessages() {
146
+ this.memoryAppender.removeLogMessages();
147
+ this.logMessagesChanged.emit();
148
+ }
149
+ /**
150
+ * Removes the log messages written by the LocalStorageAppender with the given key.
151
+ *
152
+ * @param localStorageKey key for the local storage
153
+ */
154
+ removeLogMessagesFromLocalStorage(localStorageKey) {
155
+ LocalStorageAppender.removeLogMessages(localStorageKey);
156
+ this.logMessagesChanged.emit();
157
+ }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
159
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingService, providedIn: "root" }); }
160
+ }
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingService, decorators: [{
162
+ type: Injectable,
163
+ args: [{
164
+ providedIn: "root"
165
+ }]
166
+ }], ctorParameters: () => [] });
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW9uaWMtbG9nZ2luZy1zZXJ2aWNlL3NyYy9saWIvbG9nZ2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sS0FBSyxjQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRXpEOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFxQjFCOztPQUVHO0lBQ0g7UUFFQywwREFBMEQ7UUFDMUQsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXJELHFCQUFxQjtRQUNyQixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMxRSxJ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O09BUUc7SUFDSSxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSw4QkFBOEIsQ0FBQyxlQUF1QjtRQUM1RCxPQUFPLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGlDQUFpQyxDQUFDLGVBQXVCO1FBQy9ELG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzhHQW5MVyxjQUFjO2tIQUFkLGNBQWMsY0FGZCxNQUFNOzsyRkFFTixjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQgKiBhcyBsb2c0amF2YXNjcmlwdCBmcm9tIFwibG9nNGphdmFzY3JpcHRcIjtcblxuaW1wb3J0IHsgQWpheEFwcGVuZGVyIH0gZnJvbSBcIi4vYWpheC1hcHBlbmRlci5tb2RlbFwiO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlQXBwZW5kZXIgfSBmcm9tIFwiLi9sb2NhbC1zdG9yYWdlLWFwcGVuZGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBMb2dMZXZlbENvbnZlcnRlciB9IGZyb20gXCIuL2xvZy1sZXZlbC5jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IExvZ01lc3NhZ2UgfSBmcm9tIFwiLi9sb2ctbWVzc2FnZS5tb2RlbFwiO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSBcIi4vbG9nZ2VyLm1vZGVsXCI7XG5pbXBvcnQgeyBMb2dnaW5nU2VydmljZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9sb2dnaW5nLXNlcnZpY2UuY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHsgTWVtb3J5QXBwZW5kZXIgfSBmcm9tIFwiLi9tZW1vcnktYXBwZW5kZXIubW9kZWxcIjtcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQnkgZGVmYXVsdCwgdGhlIGZvbGxvd2luZyBzZXR0aW5ncyBhcmUgdXNlZDpcbiAqICAtIGxvZ2dlcjogcm9vdCB3aXRoIGxldmVsIFdBUk5cbiAqICAtIGFwcGVuZGVyOiBCcm93c2VyQ29uc29sZUFwcGVuZGVyIHdpdGggdGhyZXNob2xkIERFQlVHIGFuZCBNZW1vcnlBcHBlbmRlciB3aXRoIHRocmVzaG9sZCBBTExcbiAqXG4gKiBWaWEgW2NvbmZpZ3VyZV0oI2NvbmZpZ3VyZSksIGl0IGlzIHBvc3NpYmxlIHRvIGFtZW5kIHRoZXNlIHNldHRpbmdzLlxuICovXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIExvZ2dpbmdTZXJ2aWNlIHtcblxuXHQvKipcblx0ICogRXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIGxvZyBtZXNzYWdlcyBnb3QgKHBvdGVudGlhbGx5KSBjaGFuZ2UuXG5cdCAqIFRoaXMgY2FuIGhhcHBlbiB3aGVuOlxuXHQgKiAtIG5ldyBtZXNzYWdlIHdhcyBhZGRlZFxuXHQgKiAtIGFsbCBtZXNzYWdlIHdoZXJlIHJlbW92ZWQgZnJvbSBtZW1vcnlcblx0ICogLSBhbGwgbWFzc2FnZXMgd2hlcmUgcmVtb3ZlZCBmb3Igb25lIHNwY2lmaWMgTG9jYWxTdG9yYWdlQXBwZW5kZXJcblx0ICovXG5cdHB1YmxpYyBsb2dNZXNzYWdlc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPjtcblxuXHQvKipcblx0ICogRXZlbnQgdHJpZ2dlcmVkIHdoZW4gYWpheCBhcHBlbmRlciBjb3VsZCBub3Qgc2VuZCBsb2cgbWVzc2FnZXMgdG8gdGhlIHNlcnZlci5cblx0ICpcblx0ICogQHBhcmFtIG1lc3NhZ2UgZXJyb3IgbWVzc2FnZVxuXHQgKi9cblx0cHVibGljIGFqYXhBcHBlbmRlckZhaWxlZDogRXZlbnRFbWl0dGVyPHN0cmluZz47XG5cblx0cHJpdmF0ZSBtZW1vcnlBcHBlbmRlcjogTWVtb3J5QXBwZW5kZXI7XG5cdHByaXZhdGUgYnJvd3NlckNvbnNvbGVBcHBlbmRlcjogbG9nNGphdmFzY3JpcHQuQnJvd3NlckNvbnNvbGVBcHBlbmRlcjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgc2VydmljZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXG5cdFx0Ly8gcHJldmVudCBsb2c0amF2YXNjcmlwdCB0byBzaG93IGFsZXJ0cyBvbiBjYXNlIG9mIGVycm9yc1xuXHRcdGxvZzRqYXZhc2NyaXB0LmxvZ0xvZy5zZXRRdWlldE1vZGUodHJ1ZSk7XG5cblx0XHQvLyBjcmVhdGUgZXZlbnQgZW1pdHRlclxuXHRcdHRoaXMubG9nTWVzc2FnZXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXHRcdHRoaXMuYWpheEFwcGVuZGVyRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cblx0XHQvLyBjb25maWd1cmUgYXBwZW5kZXJcblx0XHRjb25zdCBsb2dnZXIgPSBsb2c0amF2YXNjcmlwdC5nZXRSb290TG9nZ2VyKCk7XG5cdFx0bG9nZ2VyLnNldExldmVsKGxvZzRqYXZhc2NyaXB0LkxldmVsLldBUk4pO1xuXG5cdFx0Ly8gYnJvd3NlciBjb25zb2xlIGFwcGVuZGVyIGZvciBkZWJ1Z2dlclxuXHRcdHRoaXMuYnJvd3NlckNvbnNvbGVBcHBlbmRlciA9IG5ldyBsb2c0amF2YXNjcmlwdC5Ccm93c2VyQ29uc29sZUFwcGVuZGVyKCk7XG5cdFx0dGhpcy5icm93c2VyQ29uc29sZUFwcGVuZGVyLnNldExheW91dChuZXcgbG9nNGphdmFzY3JpcHQuUGF0dGVybkxheW91dChcIiVke0hIOm1tOnNzLFNTU30gJWMgJW1cIikpO1xuXHRcdHRoaXMuYnJvd3NlckNvbnNvbGVBcHBlbmRlci5zZXRUaHJlc2hvbGQobG9nNGphdmFzY3JpcHQuTGV2ZWwuQUxMKTtcblx0XHRsb2dnZXIuYWRkQXBwZW5kZXIodGhpcy5icm93c2VyQ29uc29sZUFwcGVuZGVyKTtcblxuXHRcdC8vIGluLW1lbW9yeSBhcHBlbmRlciBmb3IgZGlzcGxheSBvbiBsb2cgbWVzc2FnZXMgcGFnZVxuXHRcdHRoaXMubWVtb3J5QXBwZW5kZXIgPSBuZXcgTWVtb3J5QXBwZW5kZXIoKTtcblx0XHR0aGlzLm1lbW9yeUFwcGVuZGVyLnNldExheW91dChuZXcgbG9nNGphdmFzY3JpcHQuUGF0dGVybkxheW91dChcIiVke0hIOm1tOnNzLFNTU30gJWMgJW1cIikpO1xuXHRcdHRoaXMubWVtb3J5QXBwZW5kZXIuc2V0T25Mb2dNZXNzYWdlc0NoYW5nZWRDYWxsYmFjaygobWVzc2FnZSkgPT4ge1xuXHRcdFx0dGhpcy5sb2dNZXNzYWdlc0NoYW5nZWQuZW1pdCgpO1xuXHRcdH0pO1xuXHRcdGxvZ2dlci5hZGRBcHBlbmRlcih0aGlzLm1lbW9yeUFwcGVuZGVyKTtcblxuXHRcdHRoaXMuY29uZmlndXJlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29uZmlndXJlcyB0aGUgbG9nZ2luZyBkZXBlbmRpbmcgb24gdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBjb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gZGF0YS5cblx0ICovXG5cdHB1YmxpYyBjb25maWd1cmUoY29uZmlndXJhdGlvbj86IExvZ2dpbmdTZXJ2aWNlQ29uZmlndXJhdGlvbik6IHZvaWQge1xuXG5cdFx0aWYgKHR5cGVvZiBjb25maWd1cmF0aW9uID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRjb25maWd1cmF0aW9uID0ge307XG5cdFx0fVxuXG5cdFx0Ly8gc2V0IGxvZyBsZXZlbHNcblx0XHRpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24ubG9nTGV2ZWxzICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGxldmVsIG9mIGNvbmZpZ3VyYXRpb24ubG9nTGV2ZWxzKSB7XG5cdFx0XHRcdGxldCBsb2dnZXI6IGxvZzRqYXZhc2NyaXB0LkxvZ2dlcjtcblx0XHRcdFx0aWYgKGxldmVsLmxvZ2dlck5hbWUgPT09IFwicm9vdFwiKSB7XG5cdFx0XHRcdFx0bG9nZ2VyID0gbG9nNGphdmFzY3JpcHQuZ2V0Um9vdExvZ2dlcigpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxvZ2dlciA9IGxvZzRqYXZhc2NyaXB0LmdldExvZ2dlcihsZXZlbC5sb2dnZXJOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvZ2dlci5zZXRMZXZlbChMb2dMZXZlbENvbnZlcnRlci5sZXZlbFRvTG9nNEphdmFzY3JpcHQoTG9nTGV2ZWxDb252ZXJ0ZXIubGV2ZWxGcm9tU3RyaW5nKGxldmVsLmxvZ0xldmVsKSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGxvZyBsZXZlbCAke2xldmVsLmxvZ0xldmVsfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gY29uZmlndXJlIEFqYXhBcHBlbmRlclxuXHRcdGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5hamF4QXBwZW5kZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdGNvbnN0IGFqYXhBcHBlbmRlciA9IG5ldyBBamF4QXBwZW5kZXIoY29uZmlndXJhdGlvbi5hamF4QXBwZW5kZXIpO1xuXHRcdFx0YWpheEFwcGVuZGVyLmFwcGVuZGVyRmFpbGVkLnN1YnNjcmliZSgobWVzc2FnZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdHRoaXMuYWpheEFwcGVuZGVyRmFpbGVkLmVtaXQobWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0XHRcdGxvZzRqYXZhc2NyaXB0LmdldFJvb3RMb2dnZXIoKS5hZGRBcHBlbmRlcihhamF4QXBwZW5kZXIpO1xuXHRcdH1cblxuXHRcdC8vIGNvbmZpZ3VyZSBMb2NhbFN0b3JhZ2VBcHBlbmRlclxuXHRcdGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VBcHBlbmRlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0Y29uc3QgbG9jYWxTdG9yYWdlQXBwZW5kZXIgPSBuZXcgTG9jYWxTdG9yYWdlQXBwZW5kZXIoY29uZmlndXJhdGlvbi5sb2NhbFN0b3JhZ2VBcHBlbmRlcik7XG5cdFx0XHRsb2c0amF2YXNjcmlwdC5nZXRSb290TG9nZ2VyKCkuYWRkQXBwZW5kZXIobG9jYWxTdG9yYWdlQXBwZW5kZXIpO1xuXG5cdFx0XHQvLyBlbnN1cmUgdGhhdCBhbiBldmVudHVhbCBtZW1vcnlBcHBlbmRlciBpcyBiZWhpbmQgdGhlIGxvY2FsU3RvcmFnZUFwcGVuZGVyXG5cdFx0XHRjb25zdCBhcHBlbmRlcnMgPSBuZXcgTG9nZ2VyKCkuZ2V0SW50ZXJuYWxMb2dnZXIoKS5nZXRFZmZlY3RpdmVBcHBlbmRlcnMoKTtcblx0XHRcdGNvbnN0IG1lbW9yeUFwcGVuZGVyID0gYXBwZW5kZXJzLmZpbmQoKGEpID0+IGEudG9TdHJpbmcoKSA9PT0gXCJJb25pYy5Mb2dnaW5nLk1lbW9yeUFwcGVuZGVyXCIpIGFzIE1lbW9yeUFwcGVuZGVyO1xuXHRcdFx0aWYgKG1lbW9yeUFwcGVuZGVyKSB7XG5cdFx0XHRcdGxvZzRqYXZhc2NyaXB0LmdldFJvb3RMb2dnZXIoKS5yZW1vdmVBcHBlbmRlcihtZW1vcnlBcHBlbmRlcik7XG5cdFx0XHRcdGxvZzRqYXZhc2NyaXB0LmdldFJvb3RMb2dnZXIoKS5hZGRBcHBlbmRlcihtZW1vcnlBcHBlbmRlcik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gY29uZmlndXJlIE1lbW9yeUFwcGVuZGVyXG5cdFx0aWYgKGNvbmZpZ3VyYXRpb24ubWVtb3J5QXBwZW5kZXIpIHtcblx0XHRcdHRoaXMubWVtb3J5QXBwZW5kZXIuY29uZmlndXJlKGNvbmZpZ3VyYXRpb24ubWVtb3J5QXBwZW5kZXIpO1xuXHRcdH1cblxuXHRcdC8vIGNvbmZpZ3VyZSBCcm93c2VyQ29uc29sZUFwcGVuZGVyXG5cdFx0aWYgKGNvbmZpZ3VyYXRpb24uYnJvd3NlckNvbnNvbGVBcHBlbmRlcikge1xuXHRcdFx0aWYgKGNvbmZpZ3VyYXRpb24uYnJvd3NlckNvbnNvbGVBcHBlbmRlci50aHJlc2hvbGQpIHtcblx0XHRcdFx0Y29uc3QgY29udmVydGVkVGhyZXNob2xkID0gTG9nTGV2ZWxDb252ZXJ0ZXIubGV2ZWxUb0xvZzRKYXZhc2NyaXB0KFxuXHRcdFx0XHRcdExvZ0xldmVsQ29udmVydGVyLmxldmVsRnJvbVN0cmluZyhjb25maWd1cmF0aW9uLmJyb3dzZXJDb25zb2xlQXBwZW5kZXIudGhyZXNob2xkKSk7XG5cdFx0XHRcdHRoaXMuYnJvd3NlckNvbnNvbGVBcHBlbmRlci5zZXRUaHJlc2hvbGQoY29udmVydGVkVGhyZXNob2xkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSByb290IGxvZ2dlciBmcm9tIHdoaWNoIGFsbCBvdGhlciBsb2dnZXJzIGRlcml2ZS5cblx0ICpcblx0ICogQHJldHVybiByb290IGxvZ2dlclxuXHQgKi9cblx0cHVibGljIGdldFJvb3RMb2dnZXIoKTogTG9nZ2VyIHtcblx0XHRyZXR1cm4gbmV3IExvZ2dlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYSBsb2dnZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIGNyZWF0aW5nIGl0IGlmIGEgbG9nZ2VyIHdpdGggdGhhdCBuYW1lIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBsb2dnZXJOYW1lIG5hbWUgb2YgdGhlIGxvZ2dlclxuXHQgKiBAcmV0dXJuIGxvZ2dlclxuXHQgKi9cblx0cHVibGljIGdldExvZ2dlcihsb2dnZXJOYW1lOiBzdHJpbmcpOiBMb2dnZXIge1xuXHRcdHJldHVybiBuZXcgTG9nZ2VyKGxvZ2dlck5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxhc3QgbG9nIG1lc3NhZ2VzLlxuXHQgKlxuXHQgKiBUaGUgbG9nIG1lc3NhZ2VzIGFyZSByZXRyaWV2ZWQgZnJvbSB0aGUgaW50ZXJuYWwgW01lbW9yeUFwcGVuZGVyXSguLi9tZW1vcnlhcHBlbmRlci5odG1sKS5cblx0ICogVGhhdCBtZWFucyB5b3Ugd2lsbCBnZXQgb25seSB0aGUgbW9zdCBjdXJyZW50IG1lc3NhZ2VzLiBUaGUgbnVtYmVyIG9mIHRoZSBtZXNzYWdlcyBpcyBsaW1pdGVkXG5cdCAqIGJ5IGl0cyBtYXhNZXNzYWdlcyB2YWx1ZS5cblx0ICpcblx0ICogQHJldHVybiBsb2cgbWVzc2FnZXNcblx0ICovXG5cdHB1YmxpYyBnZXRMb2dNZXNzYWdlcygpOiBMb2dNZXNzYWdlW10ge1xuXHRcdHJldHVybiB0aGlzLm1lbW9yeUFwcGVuZGVyLmdldExvZ01lc3NhZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgdGhlIGxvZyBtZXNzYWdlcyB3cml0dGVuIGJ5IHRoZSBMb2NhbFN0b3JhZ2VBcHBlbmRlciB3aXRoIHRoZSBnaXZlbiBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBsb2NhbFN0b3JhZ2VLZXkga2V5IGZvciB0aGUgbG9jYWwgc3RvcmFnZVxuXHQgKiBAcmV0dXJucyBsb2cgbWVzc2FnZXNcblx0ICovXG5cdHB1YmxpYyBnZXRMb2dNZXNzYWdlc0Zyb21Mb2NhbFN0b3JhZ2UobG9jYWxTdG9yYWdlS2V5OiBzdHJpbmcpOiBMb2dNZXNzYWdlW10ge1xuXHRcdHJldHVybiBMb2NhbFN0b3JhZ2VBcHBlbmRlci5sb2FkTG9nTWVzc2FnZXMobG9jYWxTdG9yYWdlS2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYWxsIGxvZyBtZXNzYWdlcy5cblx0ICovXG5cdHB1YmxpYyByZW1vdmVMb2dNZXNzYWdlcygpOiB2b2lkIHtcblx0XHR0aGlzLm1lbW9yeUFwcGVuZGVyLnJlbW92ZUxvZ01lc3NhZ2VzKCk7XG5cdFx0dGhpcy5sb2dNZXNzYWdlc0NoYW5nZWQuZW1pdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIGxvZyBtZXNzYWdlcyB3cml0dGVuIGJ5IHRoZSBMb2NhbFN0b3JhZ2VBcHBlbmRlciB3aXRoIHRoZSBnaXZlbiBrZXkuXG5cdCAqXG5cdCAqIEBwYXJhbSBsb2NhbFN0b3JhZ2VLZXkga2V5IGZvciB0aGUgbG9jYWwgc3RvcmFnZVxuXHQgKi9cblx0cHVibGljIHJlbW92ZUxvZ01lc3NhZ2VzRnJvbUxvY2FsU3RvcmFnZShsb2NhbFN0b3JhZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdExvY2FsU3RvcmFnZUFwcGVuZGVyLnJlbW92ZUxvZ01lc3NhZ2VzKGxvY2FsU3RvcmFnZUtleSk7XG5cdFx0dGhpcy5sb2dNZXNzYWdlc0NoYW5nZWQuZW1pdCgpO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,133 @@
1
+ import * as log4javascript from "log4javascript";
2
+ import { LogLevelConverter } from "./log-level.converter";
3
+ import { LogLevel } from "./log-level.model";
4
+ /**
5
+ * An appender which stores the log messages in the browser's memory.
6
+ *
7
+ * The MemoryAppender is enabled by default.
8
+ * If you do not specify anything else, it is using this configuration:
9
+ *
10
+ * ```JSON
11
+ * {
12
+ * "memoryAppender": [
13
+ * {
14
+ * "maxMessages": 250,
15
+ * "threshold": "ALL"
16
+ * }
17
+ * }
18
+ * ```
19
+ */
20
+ export class MemoryAppender extends log4javascript.Appender {
21
+ static { this.maxMessagesDefault = 250; }
22
+ static { this.thresholdDefault = "ALL"; }
23
+ /**
24
+ * Creates a new instance of the appender.
25
+ *
26
+ * @param configuration configuration for the appender.
27
+ */
28
+ constructor(configuration) {
29
+ super();
30
+ this.logMessages = [];
31
+ // process configuration
32
+ configuration = configuration || {};
33
+ this.configure({
34
+ maxMessages: configuration.maxMessages || MemoryAppender.maxMessagesDefault,
35
+ threshold: configuration.threshold || MemoryAppender.thresholdDefault,
36
+ });
37
+ this.maxMessages = MemoryAppender.maxMessagesDefault;
38
+ }
39
+ /**
40
+ * Configures the logging depending on the given configuration.
41
+ * Only the defined properties get overwritten.
42
+ *
43
+ * @param configuration configuration data.
44
+ */
45
+ configure(configuration) {
46
+ if (configuration) {
47
+ if (configuration.maxMessages) {
48
+ this.setMaxMessages(configuration.maxMessages);
49
+ }
50
+ if (configuration.threshold) {
51
+ const convertedThreshold = LogLevelConverter.levelToLog4Javascript(LogLevelConverter.levelFromString(configuration.threshold));
52
+ this.setThreshold(convertedThreshold);
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Appender-specific method to append a log message.
58
+ *
59
+ * @param loggingEvent event to be appended.
60
+ */
61
+ append(loggingEvent) {
62
+ // if logMessages is already full, remove oldest element
63
+ while (this.logMessages.length >= this.maxMessages) {
64
+ this.logMessages.shift();
65
+ }
66
+ // add event to logMessages
67
+ const message = {
68
+ level: LogLevel[LogLevelConverter.levelFromLog4Javascript(loggingEvent.level)],
69
+ logger: typeof loggingEvent.logger === "object" ? loggingEvent.logger.name : undefined,
70
+ message: loggingEvent.messages.slice(1),
71
+ methodName: loggingEvent.messages[0],
72
+ timeStamp: loggingEvent.timeStamp,
73
+ };
74
+ this.logMessages.push(message);
75
+ // inform about new message
76
+ if (typeof this.onLogMessagesChangedCallback === "function") {
77
+ this.onLogMessagesChangedCallback(message);
78
+ }
79
+ }
80
+ /**
81
+ * Gets the appender's name.
82
+ * Mainly for unit testing purposes.
83
+ *
84
+ * @return appender's name
85
+ */
86
+ toString() {
87
+ return "Ionic.Logging.MemoryAppender";
88
+ }
89
+ /**
90
+ * Get the maximum number of messages which will be stored in memory.
91
+ */
92
+ getMaxMessages() {
93
+ return this.maxMessages;
94
+ }
95
+ /**
96
+ * Set the maximum number of messages which will be stored in memory.
97
+ *
98
+ * If the appender stores currently more messages than the new value allows, the oldest messages get removed.
99
+ *
100
+ * @param value new maximum number
101
+ */
102
+ setMaxMessages(value) {
103
+ this.maxMessages = value;
104
+ // if there are too much logMessages for the new value, remove oldest messages
105
+ if (this.logMessages.length > this.maxMessages) {
106
+ this.logMessages.splice(0, this.logMessages.length - this.maxMessages);
107
+ }
108
+ }
109
+ /**
110
+ * Gets all messages stored in memory.
111
+ *
112
+ * @return stored messages
113
+ */
114
+ getLogMessages() {
115
+ return this.logMessages;
116
+ }
117
+ /**
118
+ * Remove all messages stored in memory.
119
+ */
120
+ removeLogMessages() {
121
+ this.logMessages.splice(0);
122
+ }
123
+ /**
124
+ * Registers a callback which will be called every time a new message is appended.
125
+ * This could be useful if you want to show new messages in realtime.
126
+ *
127
+ * @param callback callback to be called
128
+ */
129
+ setOnLogMessagesChangedCallback(callback) {
130
+ this.onLogMessagesChangedCallback = callback;
131
+ }
132
+ }
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LWFwcGVuZGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW9uaWMtbG9nZ2luZy1zZXJ2aWNlL3NyYy9saWIvbWVtb3J5LWFwcGVuZGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxjQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSTdDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sT0FBTyxjQUFlLFNBQVEsY0FBYyxDQUFDLFFBQVE7YUFFM0MsdUJBQWtCLEdBQUcsR0FBRyxDQUFDO2FBQ3pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQU94Qzs7OztPQUlHO0lBQ0gsWUFBWSxhQUEyQztRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXRCLHdCQUF3QjtRQUN4QixhQUFhLEdBQUcsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2QsV0FBVyxFQUFFLGFBQWEsQ0FBQyxXQUFXLElBQUksY0FBYyxDQUFDLGtCQUFrQjtZQUMzRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsSUFBSSxjQUFjLENBQUMsZ0JBQWdCO1NBQ3JFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDLGtCQUFrQixDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxhQUEwQztRQUMxRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ25CLElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMscUJBQXFCLENBQ2pFLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsWUFBeUM7UUFDdEQsd0RBQXdEO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELDJCQUEyQjtRQUMzQixNQUFNLE9BQU8sR0FBZTtZQUMzQixLQUFLLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5RSxNQUFNLEVBQUUsT0FBTyxZQUFZLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDdEYsT0FBTyxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2QyxVQUFVLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDcEMsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTO1NBQ2pDLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvQiwyQkFBMkI7UUFDM0IsSUFBSSxPQUFPLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFFBQVE7UUFDZCxPQUFPLDhCQUE4QixDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWM7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxjQUFjLENBQUMsS0FBYTtRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV6Qiw4RUFBOEU7UUFDOUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksK0JBQStCLENBQUMsUUFBdUM7UUFDN0UsSUFBSSxDQUFDLDRCQUE0QixHQUFHLFFBQVEsQ0FBQztJQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbG9nNGphdmFzY3JpcHQgZnJvbSBcImxvZzRqYXZhc2NyaXB0XCI7XG5cbmltcG9ydCB7IExvZ0xldmVsQ29udmVydGVyIH0gZnJvbSBcIi4vbG9nLWxldmVsLmNvbnZlcnRlclwiO1xuaW1wb3J0IHsgTG9nTGV2ZWwgfSBmcm9tIFwiLi9sb2ctbGV2ZWwubW9kZWxcIjtcbmltcG9ydCB7IExvZ01lc3NhZ2UgfSBmcm9tIFwiLi9sb2ctbWVzc2FnZS5tb2RlbFwiO1xuaW1wb3J0IHsgTWVtb3J5QXBwZW5kZXJDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vbWVtb3J5LWFwcGVuZGVyLmNvbmZpZ3VyYXRpb25cIjtcblxuLyoqXG4gKiBBbiBhcHBlbmRlciB3aGljaCBzdG9yZXMgdGhlIGxvZyBtZXNzYWdlcyBpbiB0aGUgYnJvd3NlcidzIG1lbW9yeS5cbiAqXG4gKiBUaGUgTWVtb3J5QXBwZW5kZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuICogSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGFueXRoaW5nIGVsc2UsIGl0IGlzIHVzaW5nIHRoaXMgY29uZmlndXJhdGlvbjpcbiAqXG4gKiBgYGBKU09OXG4gKiB7XG4gKiAgIFwibWVtb3J5QXBwZW5kZXJcIjogW1xuICogICAgIHtcbiAqICAgICAgIFwibWF4TWVzc2FnZXNcIjogMjUwLFxuICogICAgICAgXCJ0aHJlc2hvbGRcIjogXCJBTExcIlxuICogICAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5QXBwZW5kZXIgZXh0ZW5kcyBsb2c0amF2YXNjcmlwdC5BcHBlbmRlciB7XG5cblx0cHJpdmF0ZSBzdGF0aWMgbWF4TWVzc2FnZXNEZWZhdWx0ID0gMjUwO1xuXHRwcml2YXRlIHN0YXRpYyB0aHJlc2hvbGREZWZhdWx0ID0gXCJBTExcIjtcblxuXHRwcml2YXRlIG1heE1lc3NhZ2VzOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBsb2dNZXNzYWdlczogTG9nTWVzc2FnZVtdO1xuXHRwcml2YXRlIG9uTG9nTWVzc2FnZXNDaGFuZ2VkQ2FsbGJhY2s6IChtZXNzYWdlOiBMb2dNZXNzYWdlKSA9PiB2b2lkO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBhcHBlbmRlci5cblx0ICpcblx0ICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGFwcGVuZGVyLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IE1lbW9yeUFwcGVuZGVyQ29uZmlndXJhdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmxvZ01lc3NhZ2VzID0gW107XG5cblx0XHQvLyBwcm9jZXNzIGNvbmZpZ3VyYXRpb25cblx0XHRjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCB7fTtcblx0XHR0aGlzLmNvbmZpZ3VyZSh7XG5cdFx0XHRtYXhNZXNzYWdlczogY29uZmlndXJhdGlvbi5tYXhNZXNzYWdlcyB8fCBNZW1vcnlBcHBlbmRlci5tYXhNZXNzYWdlc0RlZmF1bHQsXG5cdFx0XHR0aHJlc2hvbGQ6IGNvbmZpZ3VyYXRpb24udGhyZXNob2xkIHx8IE1lbW9yeUFwcGVuZGVyLnRocmVzaG9sZERlZmF1bHQsXG5cdFx0fSk7XG5cblx0XHR0aGlzLm1heE1lc3NhZ2VzID0gTWVtb3J5QXBwZW5kZXIubWF4TWVzc2FnZXNEZWZhdWx0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpZ3VyZXMgdGhlIGxvZ2dpbmcgZGVwZW5kaW5nIG9uIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uLlxuXHQgKiBPbmx5IHRoZSBkZWZpbmVkIHByb3BlcnRpZXMgZ2V0IG92ZXJ3cml0dGVuLlxuXHQgKlxuXHQgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uIGRhdGEuXG5cdCAqL1xuXHRwdWJsaWMgY29uZmlndXJlKGNvbmZpZ3VyYXRpb246IE1lbW9yeUFwcGVuZGVyQ29uZmlndXJhdGlvbik6IHZvaWQge1xuXHRcdGlmIChjb25maWd1cmF0aW9uKSB7XG5cdFx0XHRpZiAoY29uZmlndXJhdGlvbi5tYXhNZXNzYWdlcykge1xuXHRcdFx0XHR0aGlzLnNldE1heE1lc3NhZ2VzKGNvbmZpZ3VyYXRpb24ubWF4TWVzc2FnZXMpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNvbmZpZ3VyYXRpb24udGhyZXNob2xkKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnZlcnRlZFRocmVzaG9sZCA9IExvZ0xldmVsQ29udmVydGVyLmxldmVsVG9Mb2c0SmF2YXNjcmlwdChcblx0XHRcdFx0XHRMb2dMZXZlbENvbnZlcnRlci5sZXZlbEZyb21TdHJpbmcoY29uZmlndXJhdGlvbi50aHJlc2hvbGQpKTtcblx0XHRcdFx0dGhpcy5zZXRUaHJlc2hvbGQoY29udmVydGVkVGhyZXNob2xkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kZXItc3BlY2lmaWMgbWV0aG9kIHRvIGFwcGVuZCBhIGxvZyBtZXNzYWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0gbG9nZ2luZ0V2ZW50IGV2ZW50IHRvIGJlIGFwcGVuZGVkLlxuXHQgKi9cblx0cHVibGljIGFwcGVuZChsb2dnaW5nRXZlbnQ6IGxvZzRqYXZhc2NyaXB0LkxvZ2dpbmdFdmVudCk6IHZvaWQge1xuXHRcdC8vIGlmIGxvZ01lc3NhZ2VzIGlzIGFscmVhZHkgZnVsbCwgcmVtb3ZlIG9sZGVzdCBlbGVtZW50XG5cdFx0d2hpbGUgKHRoaXMubG9nTWVzc2FnZXMubGVuZ3RoID49IHRoaXMubWF4TWVzc2FnZXMpIHtcblx0XHRcdHRoaXMubG9nTWVzc2FnZXMuc2hpZnQoKTtcblx0XHR9XG5cdFx0Ly8gYWRkIGV2ZW50IHRvIGxvZ01lc3NhZ2VzXG5cdFx0Y29uc3QgbWVzc2FnZTogTG9nTWVzc2FnZSA9IHtcblx0XHRcdGxldmVsOiBMb2dMZXZlbFtMb2dMZXZlbENvbnZlcnRlci5sZXZlbEZyb21Mb2c0SmF2YXNjcmlwdChsb2dnaW5nRXZlbnQubGV2ZWwpXSxcblx0XHRcdGxvZ2dlcjogdHlwZW9mIGxvZ2dpbmdFdmVudC5sb2dnZXIgPT09IFwib2JqZWN0XCIgPyBsb2dnaW5nRXZlbnQubG9nZ2VyLm5hbWUgOiB1bmRlZmluZWQsXG5cdFx0XHRtZXNzYWdlOiBsb2dnaW5nRXZlbnQubWVzc2FnZXMuc2xpY2UoMSksXG5cdFx0XHRtZXRob2ROYW1lOiBsb2dnaW5nRXZlbnQubWVzc2FnZXNbMF0sXG5cdFx0XHR0aW1lU3RhbXA6IGxvZ2dpbmdFdmVudC50aW1lU3RhbXAsXG5cdFx0fTtcblx0XHR0aGlzLmxvZ01lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG5cblx0XHQvLyBpbmZvcm0gYWJvdXQgbmV3IG1lc3NhZ2Vcblx0XHRpZiAodHlwZW9mIHRoaXMub25Mb2dNZXNzYWdlc0NoYW5nZWRDYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aGlzLm9uTG9nTWVzc2FnZXNDaGFuZ2VkQ2FsbGJhY2sobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFwcGVuZGVyJ3MgbmFtZS5cblx0ICogTWFpbmx5IGZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMuXG5cdCAqXG5cdCAqIEByZXR1cm4gYXBwZW5kZXIncyBuYW1lXG5cdCAqL1xuXHRwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJJb25pYy5Mb2dnaW5nLk1lbW9yeUFwcGVuZGVyXCI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyB3aGljaCB3aWxsIGJlIHN0b3JlZCBpbiBtZW1vcnkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TWF4TWVzc2FnZXMoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5tYXhNZXNzYWdlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHdoaWNoIHdpbGwgYmUgc3RvcmVkIGluIG1lbW9yeS5cblx0ICpcblx0ICogSWYgdGhlIGFwcGVuZGVyIHN0b3JlcyBjdXJyZW50bHkgbW9yZSBtZXNzYWdlcyB0aGFuIHRoZSBuZXcgdmFsdWUgYWxsb3dzLCB0aGUgb2xkZXN0IG1lc3NhZ2VzIGdldCByZW1vdmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgbmV3IG1heGltdW0gbnVtYmVyXG5cdCAqL1xuXHRwdWJsaWMgc2V0TWF4TWVzc2FnZXModmFsdWU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubWF4TWVzc2FnZXMgPSB2YWx1ZTtcblxuXHRcdC8vIGlmIHRoZXJlIGFyZSB0b28gbXVjaCBsb2dNZXNzYWdlcyBmb3IgdGhlIG5ldyB2YWx1ZSwgcmVtb3ZlIG9sZGVzdCBtZXNzYWdlc1xuXHRcdGlmICh0aGlzLmxvZ01lc3NhZ2VzLmxlbmd0aCA+IHRoaXMubWF4TWVzc2FnZXMpIHtcblx0XHRcdHRoaXMubG9nTWVzc2FnZXMuc3BsaWNlKDAsIHRoaXMubG9nTWVzc2FnZXMubGVuZ3RoIC0gdGhpcy5tYXhNZXNzYWdlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYWxsIG1lc3NhZ2VzIHN0b3JlZCBpbiBtZW1vcnkuXG5cdCAqXG5cdCAqIEByZXR1cm4gc3RvcmVkIG1lc3NhZ2VzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TG9nTWVzc2FnZXMoKTogTG9nTWVzc2FnZVtdIHtcblx0XHRyZXR1cm4gdGhpcy5sb2dNZXNzYWdlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYWxsIG1lc3NhZ2VzIHN0b3JlZCBpbiBtZW1vcnkuXG5cdCAqL1xuXHRwdWJsaWMgcmVtb3ZlTG9nTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5sb2dNZXNzYWdlcy5zcGxpY2UoMCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSBhIG5ldyBtZXNzYWdlIGlzIGFwcGVuZGVkLlxuXHQgKiBUaGlzIGNvdWxkIGJlIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBzaG93IG5ldyBtZXNzYWdlcyBpbiByZWFsdGltZS5cblx0ICpcblx0ICogQHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNrIHRvIGJlIGNhbGxlZFxuXHQgKi9cblx0cHVibGljIHNldE9uTG9nTWVzc2FnZXNDaGFuZ2VkQ2FsbGJhY2soY2FsbGJhY2s6IChtZXNzYWdlOiBMb2dNZXNzYWdlKSA9PiB2b2lkKTogdm9pZCB7XG5cdFx0dGhpcy5vbkxvZ01lc3NhZ2VzQ2hhbmdlZENhbGxiYWNrID0gY2FsbGJhY2s7XG5cdH1cbn1cbiJdfQ==