简体   繁体   中英

NGX Logger Server-Side Logging in Angular 8 + Asp.net WEB API 2 allways return Timestamp:0, FileName = main.js & LineNumber from main.js

I am working in Angular 8 & Asp.net WebApi 2. Angular i am calling logger in ErrorHandlerService

    import { ErrorHandler, Injectable, Injector } from '@angular/core';
    import { AppConfigService } from '@core/app-config/app.config.service';
    import { NGXLogger } from 'ngx-logger';
    @Injectable()
    export class ErrorHandlerService implements ErrorHandler {
      constructor(private injector: Injector, private logger: NGXLogger) { 
       }
      handleError(error: any): void {
        this.logger.error(error);
      }
    }
    // Registering in App module -->
      LoggerModule.forRoot({serverLoggingUrl: '/api/loggs/client', level: NgxLoggerLevel.DEBUG, serverLogLevel: NgxLoggerLevel.DEBUG}),
     ],
      providers: [

        { provide: ErrorHandler, useClass: ErrorHandlerService }

      ],

  \\ Server side coding :


    public class LogPayload
        {
            public LogLevelEnum Level { get; set; }
            public double Timestamp { get; set; }
            public string FileName { get; set; }
            public string LineNumber { get; set; }
            public string Message { get; set; }

        } 

            [Route("api/loggs/client")]
            [HttpPost]
            public void LogClient(LogPayload log)
            {
                 _Service.RegisterLog(log);
            }

     public void RegisterLog(LogPayload log)
            {
                // read log details
                log file deatils:
                log.FileName :main.js
                log.Level = Error
                log.LineNumber = 18494
                log.Message ="Http failure response" 

             }

Not sure how to get component name instead of main.js with line number from Angular component? and also Timestamp always return 0. Do we have to use export class NGXLogInterface { level: NgxLoggerLevel; timestamp: string; fileName: string; lineNumber: string; message: string; additional: any[]; } in Angular to pass each items in post request? There is no much documentation for server logging. Any help would be great.

You need to specify components by own or create generic methods. because when logs generate it create.js file.

Change Property of TimeStamp to string. then you can parse it to Datetime.

 [HttpPost] public IActionResult Post([FromBody] LogDto dto) { var msg = $"MESSAGE: {dto.Message} - " + $"FILE: {dto.FileName} - " + $"LEVEL: {dto.Level} - " + $"LINENUMBER: {dto.LineNumber} - " + $"TIMESTAMP: {dto.Timestamp}" + _logger.LogError(msg); return Ok(); }

You need to set enableSourceMaps to true in logger config

Be careful, for this to work you need to generate source maps when building

More info in the doc: https://github.com/dbfannin/ngx-logger/blob/master/docs/features.md

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM