ionic-logging-service 18.0.0 → 22.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 (39) hide show
  1. package/README.md +12 -21
  2. package/fesm2022/ionic-logging-service.mjs +47 -74
  3. package/fesm2022/ionic-logging-service.mjs.map +1 -1
  4. package/package.json +11 -9
  5. package/types/ionic-logging-service.d.ts +643 -0
  6. package/esm2022/ionic-logging-service.mjs +0 -5
  7. package/esm2022/lib/ajax-appender.configuration.mjs +0 -2
  8. package/esm2022/lib/ajax-appender.model.mjs +0 -149
  9. package/esm2022/lib/browser-console-appender.configuration.mjs +0 -2
  10. package/esm2022/lib/json-layout.model.mjs +0 -31
  11. package/esm2022/lib/local-storage-appender.configuration.mjs +0 -2
  12. package/esm2022/lib/local-storage-appender.model.mjs +0 -177
  13. package/esm2022/lib/log-level.converter.mjs +0 -92
  14. package/esm2022/lib/log-level.model.mjs +0 -47
  15. package/esm2022/lib/log-message.model.mjs +0 -2
  16. package/esm2022/lib/logger.model.mjs +0 -191
  17. package/esm2022/lib/logging-service.configuration.mjs +0 -2
  18. package/esm2022/lib/logging-service.module.mjs +0 -16
  19. package/esm2022/lib/logging.service.mjs +0 -167
  20. package/esm2022/lib/memory-appender.configuration.mjs +0 -2
  21. package/esm2022/lib/memory-appender.model.mjs +0 -133
  22. package/esm2022/public_api.mjs +0 -18
  23. package/index.d.ts +0 -5
  24. package/lib/ajax-appender.configuration.d.ts +0 -37
  25. package/lib/ajax-appender.model.d.ts +0 -92
  26. package/lib/browser-console-appender.configuration.d.ts +0 -13
  27. package/lib/json-layout.model.d.ts +0 -20
  28. package/lib/local-storage-appender.configuration.d.ts +0 -23
  29. package/lib/local-storage-appender.model.d.ts +0 -95
  30. package/lib/log-level.converter.d.ts +0 -28
  31. package/lib/log-level.model.d.ts +0 -37
  32. package/lib/log-message.model.d.ts +0 -25
  33. package/lib/logger.model.d.ts +0 -88
  34. package/lib/logging-service.configuration.d.ts +0 -40
  35. package/lib/logging-service.module.d.ts +0 -6
  36. package/lib/logging.service.d.ts +0 -84
  37. package/lib/memory-appender.configuration.d.ts +0 -19
  38. package/lib/memory-appender.model.d.ts +0 -81
  39. package/public_api.d.ts +0 -14
package/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  # ionic-logging-service
2
2
 
3
- **The dependencies used by the latest version are the same as needed for [Ionic 7.0.0](https://github.com/ionic-team/ionic/blob/master/CHANGELOG.md). For older versions use:**
3
+ **The dependencies used by the latest version are the same as needed for [Ionic 8.0.0](https://github.com/ionic-team/ionic/blob/master/CHANGELOG.md). For older versions use:**
4
4
 
5
5
  | ionic-logging-service | Ionic | Angular
6
6
  | ------ | -------- | ------
7
+ | 22.0.0 | >= 8.0.0 | >=22.0.0
8
+ | 21.0.0 | >= 8.0.0 | >=21.0.0
7
9
  | 18.0.0 | >= 7.0.0 | >=17.0.0
8
10
  | 17.0.0 | >= 6.1.9 | ^16.0.0
9
11
  | 16.0.0 | >= 6.1.9 | ^15.0.0
@@ -121,29 +123,18 @@ export const environment = {
121
123
  };
122
124
  ```
123
125
 
124
- Call `configure()` in your `app.module.ts`:
126
+ Call `configure()` in your `app.config.ts`:
125
127
 
126
128
  ```TypeScript
127
- export function configureLogging(loggingService: LoggingService): () => void {
128
- return () => loggingService.configure(environment.logging);
129
- }
130
-
131
- @NgModule({
132
- ...
133
- imports: [
134
- ...
135
- LoggingServiceModule
136
- ],
129
+ export const appConfig: ApplicationConfig = {
137
130
  providers: [
138
- {
139
- deps: [LoggingService],
140
- multi: true,
141
- provide: APP_INITIALIZER,
142
- useFactory: configureLogging
143
- }
131
+ ...
132
+ provideAppInitializer(() => {
133
+ const loggingService = inject(LoggingService);
134
+ loggingService.configure(environment.logging);
135
+ }),
144
136
  ]
145
- })
146
- export class AppModule { }
137
+ };
147
138
  ```
148
139
 
149
140
  ### logLevels
@@ -185,4 +176,4 @@ With `memoryAppender`, it is possible to configure the `MemoryAppender`, which k
185
176
 
186
177
  ## API
187
178
 
188
- see [API documentation](https://ritzlgrmft.github.io/ionic-logging-service//service/index.html).
179
+ see [API documentation](https://ritzlgrmft.github.io/ionic-logging-service/service/index.html).
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Injectable, NgModule } from '@angular/core';
2
+ import { signal, Injectable } from '@angular/core';
3
3
  import * as log4javascript from 'log4javascript';
4
4
 
5
5
  /**
@@ -40,42 +40,34 @@ var LogLevel;
40
40
  /**
41
41
  * All events should be logged.
42
42
  */
43
- // eslint-disable-next-line @typescript-eslint/naming-convention
44
43
  LogLevel[LogLevel["ALL"] = 0] = "ALL";
45
44
  /**
46
45
  * A fine-grained debug message, typically capturing the flow through the application.
47
46
  */
48
- // eslint-disable-next-line @typescript-eslint/naming-convention
49
47
  LogLevel[LogLevel["TRACE"] = 1] = "TRACE";
50
48
  /**
51
49
  * A general debugging event.
52
50
  */
53
- // eslint-disable-next-line @typescript-eslint/naming-convention
54
51
  LogLevel[LogLevel["DEBUG"] = 2] = "DEBUG";
55
52
  /**
56
53
  * An event for informational purposes.
57
54
  */
58
- // eslint-disable-next-line @typescript-eslint/naming-convention
59
55
  LogLevel[LogLevel["INFO"] = 3] = "INFO";
60
56
  /**
61
57
  * An event that might possible lead to an error.
62
58
  */
63
- // eslint-disable-next-line @typescript-eslint/naming-convention
64
59
  LogLevel[LogLevel["WARN"] = 4] = "WARN";
65
60
  /**
66
61
  * An error in the application, possibly recoverable.
67
62
  */
68
- // eslint-disable-next-line @typescript-eslint/naming-convention
69
63
  LogLevel[LogLevel["ERROR"] = 5] = "ERROR";
70
64
  /**
71
65
  * A severe error that will prevent the application from continuing.
72
66
  */
73
- // eslint-disable-next-line @typescript-eslint/naming-convention
74
67
  LogLevel[LogLevel["FATAL"] = 6] = "FATAL";
75
68
  /**
76
69
  * No events will be logged.
77
70
  */
78
- // eslint-disable-next-line @typescript-eslint/naming-convention
79
71
  LogLevel[LogLevel["OFF"] = 7] = "OFF";
80
72
  })(LogLevel || (LogLevel = {}));
81
73
 
@@ -194,6 +186,8 @@ class AjaxAppender extends log4javascript.Appender {
194
186
  */
195
187
  constructor(configuration) {
196
188
  super();
189
+ this.lastFailure = signal(undefined, /* @ts-ignore */
190
+ ...(ngDevMode ? [{ debugName: "lastFailure" }] : /* istanbul ignore next */ []));
197
191
  if (!configuration) {
198
192
  throw new Error("configuration must be not empty");
199
193
  }
@@ -202,13 +196,12 @@ class AjaxAppender extends log4javascript.Appender {
202
196
  }
203
197
  this.ajaxAppender = new log4javascript.AjaxAppender(configuration.url, configuration.withCredentials);
204
198
  this.url = configuration.url;
205
- this.withCredentials = configuration.withCredentials;
199
+ this.withCredentials = configuration.withCredentials ?? false;
206
200
  this.ajaxAppender.setLayout(new JsonLayout(false, false));
207
201
  this.ajaxAppender.addHeader("Content-Type", "application/json; charset=utf-8");
208
202
  this.ajaxAppender.setSendAllOnUnload(true);
209
- this.appenderFailed = new EventEmitter();
210
203
  this.ajaxAppender.setFailCallback((message) => {
211
- this.appenderFailed.emit(message);
204
+ this.lastFailure.set(message);
212
205
  });
213
206
  // process remaining configuration
214
207
  this.configure({
@@ -312,6 +305,13 @@ class AjaxAppender extends log4javascript.Appender {
312
305
  this.ajaxAppender.setTimed(timerInterval > 0);
313
306
  this.ajaxAppender.setTimerInterval(timerInterval);
314
307
  }
308
+ /**
309
+ * Last error message when the appender could not send log messages to the server.
310
+ * @returns error message
311
+ */
312
+ getLastFailure() {
313
+ return this.lastFailure.asReadonly();
314
+ }
315
315
  }
316
316
 
317
317
  /**
@@ -340,6 +340,7 @@ class LocalStorageAppender extends log4javascript.Appender {
340
340
  */
341
341
  constructor(configuration) {
342
342
  super();
343
+ this.maxMessages = LocalStorageAppender.maxMessagesDefault;
343
344
  if (!configuration) {
344
345
  throw new Error("configuration must be not empty");
345
346
  }
@@ -368,7 +369,7 @@ class LocalStorageAppender extends log4javascript.Appender {
368
369
  logMessages = [];
369
370
  }
370
371
  else {
371
- logMessages = JSON.parse(localStorage.getItem(localStorageKey));
372
+ logMessages = JSON.parse(localStorage.getItem(localStorageKey) ?? "");
372
373
  for (const logMessage of logMessages) {
373
374
  // timestamps are serialized as strings
374
375
  logMessage.timeStamp = new Date(logMessage.timeStamp);
@@ -532,7 +533,7 @@ class Logger {
532
533
  for (const param of params) {
533
534
  args.push(this.formatArgument(param));
534
535
  }
535
- this.logger.trace.apply(this.logger, args);
536
+ this.logger.trace(...args);
536
537
  }
537
538
  }
538
539
  /**
@@ -547,7 +548,7 @@ class Logger {
547
548
  for (const param of params) {
548
549
  args.push(this.formatArgument(param));
549
550
  }
550
- this.logger.debug.apply(this.logger, args);
551
+ this.logger.debug(...args);
551
552
  }
552
553
  }
553
554
  /**
@@ -562,7 +563,7 @@ class Logger {
562
563
  for (const param of params) {
563
564
  args.push(this.formatArgument(param));
564
565
  }
565
- this.logger.info.apply(this.logger, args);
566
+ this.logger.info(...args);
566
567
  }
567
568
  }
568
569
  /**
@@ -577,7 +578,7 @@ class Logger {
577
578
  for (const param of params) {
578
579
  args.push(this.formatArgument(param));
579
580
  }
580
- this.logger.warn.apply(this.logger, args);
581
+ this.logger.warn(...args);
581
582
  }
582
583
  }
583
584
  /**
@@ -592,7 +593,7 @@ class Logger {
592
593
  for (const param of params) {
593
594
  args.push(this.formatArgument(param));
594
595
  }
595
- this.logger.error.apply(this.logger, args);
596
+ this.logger.error(...args);
596
597
  }
597
598
  }
598
599
  /**
@@ -607,7 +608,7 @@ class Logger {
607
608
  for (const param of params) {
608
609
  args.push(this.formatArgument(param));
609
610
  }
610
- this.logger.fatal.apply(this.logger, args);
611
+ this.logger.fatal(...args);
611
612
  }
612
613
  }
613
614
  /**
@@ -625,7 +626,7 @@ class Logger {
625
626
  args.push(this.formatArgument(param));
626
627
  }
627
628
  }
628
- this.logger.info.apply(this.logger, args);
629
+ this.logger.info(...args);
629
630
  }
630
631
  }
631
632
  /**
@@ -643,7 +644,7 @@ class Logger {
643
644
  args.push(this.formatArgument(param));
644
645
  }
645
646
  }
646
- this.logger.info.apply(this.logger, args);
647
+ this.logger.info(...args);
647
648
  }
648
649
  }
649
650
  /**
@@ -703,7 +704,8 @@ class MemoryAppender extends log4javascript.Appender {
703
704
  */
704
705
  constructor(configuration) {
705
706
  super();
706
- this.logMessages = [];
707
+ this.logMessages = signal([], /* @ts-ignore */
708
+ ...(ngDevMode ? [{ debugName: "logMessages" }] : /* istanbul ignore next */ []));
707
709
  // process configuration
708
710
  configuration = configuration || {};
709
711
  this.configure({
@@ -736,8 +738,8 @@ class MemoryAppender extends log4javascript.Appender {
736
738
  */
737
739
  append(loggingEvent) {
738
740
  // if logMessages is already full, remove oldest element
739
- while (this.logMessages.length >= this.maxMessages) {
740
- this.logMessages.shift();
741
+ while (this.logMessages().length >= this.maxMessages) {
742
+ this.logMessages.update(messages => messages.slice(1));
741
743
  }
742
744
  // add event to logMessages
743
745
  const message = {
@@ -747,11 +749,7 @@ class MemoryAppender extends log4javascript.Appender {
747
749
  methodName: loggingEvent.messages[0],
748
750
  timeStamp: loggingEvent.timeStamp,
749
751
  };
750
- this.logMessages.push(message);
751
- // inform about new message
752
- if (typeof this.onLogMessagesChangedCallback === "function") {
753
- this.onLogMessagesChangedCallback(message);
754
- }
752
+ this.logMessages.update(messages => [...messages, message]);
755
753
  }
756
754
  /**
757
755
  * Gets the appender's name.
@@ -778,8 +776,8 @@ class MemoryAppender extends log4javascript.Appender {
778
776
  setMaxMessages(value) {
779
777
  this.maxMessages = value;
780
778
  // if there are too much logMessages for the new value, remove oldest messages
781
- if (this.logMessages.length > this.maxMessages) {
782
- this.logMessages.splice(0, this.logMessages.length - this.maxMessages);
779
+ if (this.logMessages().length > this.maxMessages) {
780
+ this.logMessages.update(messages => messages.slice(this.logMessages().length - this.maxMessages));
783
781
  }
784
782
  }
785
783
  /**
@@ -788,22 +786,13 @@ class MemoryAppender extends log4javascript.Appender {
788
786
  * @return stored messages
789
787
  */
790
788
  getLogMessages() {
791
- return this.logMessages;
789
+ return this.logMessages.asReadonly();
792
790
  }
793
791
  /**
794
792
  * Remove all messages stored in memory.
795
793
  */
796
794
  removeLogMessages() {
797
- this.logMessages.splice(0);
798
- }
799
- /**
800
- * Registers a callback which will be called every time a new message is appended.
801
- * This could be useful if you want to show new messages in realtime.
802
- *
803
- * @param callback callback to be called
804
- */
805
- setOnLogMessagesChangedCallback(callback) {
806
- this.onLogMessagesChangedCallback = callback;
795
+ this.logMessages.set([]);
807
796
  }
808
797
  }
809
798
 
@@ -823,9 +812,6 @@ class LoggingService {
823
812
  constructor() {
824
813
  // prevent log4javascript to show alerts on case of errors
825
814
  log4javascript.logLog.setQuietMode(true);
826
- // create event emitter
827
- this.logMessagesChanged = new EventEmitter();
828
- this.ajaxAppenderFailed = new EventEmitter();
829
815
  // configure appender
830
816
  const logger = log4javascript.getRootLogger();
831
817
  logger.setLevel(log4javascript.Level.WARN);
@@ -837,9 +823,6 @@ class LoggingService {
837
823
  // in-memory appender for display on log messages page
838
824
  this.memoryAppender = new MemoryAppender();
839
825
  this.memoryAppender.setLayout(new log4javascript.PatternLayout("%d{HH:mm:ss,SSS} %c %m"));
840
- this.memoryAppender.setOnLogMessagesChangedCallback((message) => {
841
- this.logMessagesChanged.emit();
842
- });
843
826
  logger.addAppender(this.memoryAppender);
844
827
  this.configure();
845
828
  }
@@ -865,18 +848,15 @@ class LoggingService {
865
848
  try {
866
849
  logger.setLevel(LogLevelConverter.levelToLog4Javascript(LogLevelConverter.levelFromString(level.logLevel)));
867
850
  }
868
- catch (e) {
851
+ catch {
869
852
  throw new Error(`invalid log level ${level.logLevel}`);
870
853
  }
871
854
  }
872
855
  }
873
856
  // configure AjaxAppender
874
857
  if (typeof configuration.ajaxAppender !== "undefined") {
875
- const ajaxAppender = new AjaxAppender(configuration.ajaxAppender);
876
- ajaxAppender.appenderFailed.subscribe((message) => {
877
- this.ajaxAppenderFailed.emit(message);
878
- });
879
- log4javascript.getRootLogger().addAppender(ajaxAppender);
858
+ this.ajaxAppender = new AjaxAppender(configuration.ajaxAppender);
859
+ log4javascript.getRootLogger().addAppender(this.ajaxAppender);
880
860
  }
881
861
  // configure LocalStorageAppender
882
862
  if (typeof configuration.localStorageAppender !== "undefined") {
@@ -945,7 +925,6 @@ class LoggingService {
945
925
  */
946
926
  removeLogMessages() {
947
927
  this.memoryAppender.removeLogMessages();
948
- this.logMessagesChanged.emit();
949
928
  }
950
929
  /**
951
930
  * Removes the log messages written by the LocalStorageAppender with the given key.
@@ -954,32 +933,26 @@ class LoggingService {
954
933
  */
955
934
  removeLogMessagesFromLocalStorage(localStorageKey) {
956
935
  LocalStorageAppender.removeLogMessages(localStorageKey);
957
- this.logMessagesChanged.emit();
958
936
  }
959
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
960
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingService, providedIn: "root" }); }
937
+ /**
938
+ * Error messages when the ajax appender could not send log messages to the server.
939
+ * @returns error messages
940
+ */
941
+ getLastAjaxAppenderFailure() {
942
+ return this.ajaxAppender
943
+ ? this.ajaxAppender.getLastFailure()
944
+ : signal(undefined).asReadonly();
945
+ }
946
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: LoggingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
947
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: LoggingService, providedIn: "root" }); }
961
948
  }
962
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingService, decorators: [{
949
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: LoggingService, decorators: [{
963
950
  type: Injectable,
964
951
  args: [{
965
952
  providedIn: "root"
966
953
  }]
967
954
  }], ctorParameters: () => [] });
968
955
 
969
- class LoggingServiceModule {
970
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingServiceModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
971
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.2", ngImport: i0, type: LoggingServiceModule }); }
972
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingServiceModule }); }
973
- }
974
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: LoggingServiceModule, decorators: [{
975
- type: NgModule,
976
- args: [{
977
- imports: [],
978
- declarations: [],
979
- exports: []
980
- }]
981
- }] });
982
-
983
956
  /*
984
957
  * Public API Surface of ionic-logging-service.
985
958
  */
@@ -988,5 +961,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
988
961
  * Generated bundle index. Do not edit.
989
962
  */
990
963
 
991
- export { AjaxAppender, LocalStorageAppender, LogLevel, LogLevelConverter, Logger, LoggingService, LoggingServiceModule, MemoryAppender };
964
+ export { AjaxAppender, LocalStorageAppender, LogLevel, LogLevelConverter, Logger, LoggingService, MemoryAppender };
992
965
  //# sourceMappingURL=ionic-logging-service.mjs.map