/

Angular

ByteHide Logger integrates with Angular applications through services and provides comprehensive logging for components and services.

Installation

npm install @bytehide/logger @angular/core

Logger Service

// services/logger.service.ts
import { Injectable } from '@angular/core';
import { Log } from '@bytehide/logger';

@Injectable({
    providedIn: 'root'
})
export class LoggerService {
    constructor() {
        Log.configure({
            projectToken: environment.byteHideToken,
            logLevel: 'info'
        });
        
        Log.info('Angular logger service initialized');
    }
    
    info(message: string, options?: any) {
        Log.info(message, options);
    }
    
    warn(message: string, options?: any) {
        Log.warn(message, options);
    }
    
    error(message: string, options?: any, error?: Error) {
        Log.error(message, options, error);
    }
    
    identify(userId: string, email?: string) {
        Log.identify(userId, email);
    }
}

Environment Configuration

// environments/environment.ts
export const environment = {
    production: false,
    byteHideToken: 'your-project-token'
};

Component Usage

// components/user.component.ts
import { Component, OnInit, OnDestroy } from '@angular/core';
import { LoggerService } from '../services/logger.service';

@Component({
    selector: 'app-user',
    templateUrl: './user.component.html'
})
export class UserComponent implements OnInit, OnDestroy {
    constructor(private logger: LoggerService) {}
    
    ngOnInit() {
        this.logger.info('UserComponent initialized');
    }
    
    ngOnDestroy() {
        this.logger.info('UserComponent destroyed');
    }
    
    onButtonClick() {
        this.logger.info('Button clicked', {
            context: { component: 'UserComponent', action: 'click' }
        });
    }
}

HTTP Interceptor

// interceptors/logging.interceptor.ts
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';
import { LoggerService } from '../services/logger.service';

@Injectable()
export class LoggingInterceptor implements HttpInterceptor {
    constructor(private logger: LoggerService) {}
    
    intercept(req: HttpRequest<any>, next: HttpHandler) {
        this.logger.info('HTTP request started', {
            context: { 
                method: req.method, 
                url: req.url 
            }
        });
        
        return next.handle(req).pipe(
            tap(
                response => {
                    this.logger.info('HTTP request completed', {
                        context: { 
                            method: req.method, 
                            url: req.url,
                            status: response.status 
                        }
                    });
                },
                error => {
                    this.logger.error('HTTP request failed', {
                        context: { 
                            method: req.method, 
                            url: req.url 
                        }
                    }, error);
                }
            )
        );
    }
}

Error Handler

// error-handler.ts
import { ErrorHandler, Injectable } from '@angular/core';
import { LoggerService } from './services/logger.service';

@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
    constructor(private logger: LoggerService) {}
    
    handleError(error: any): void {
        this.logger.error('Global error handler caught error', {
            context: { source: 'GlobalErrorHandler' }
        }, error);
    }
}

App Module Configuration

// app.module.ts
import { NgModule, ErrorHandler } from '@angular/core';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { LoggerService } from './services/logger.service';
import { LoggingInterceptor } from './interceptors/logging.interceptor';
import { GlobalErrorHandler } from './error-handler';

@NgModule({
    providers: [
        LoggerService,
        {
            provide: HTTP_INTERCEPTORS,
            useClass: LoggingInterceptor,
            multi: true
        },
        {
            provide: ErrorHandler,
            useClass: GlobalErrorHandler
        }
    ]
})
export class AppModule {}

Route Logging

// app-routing.module.ts
import { Router, NavigationEnd } from '@angular/router';
import { LoggerService } from './services/logger.service';

@Injectable()
export class AppRoutingModule {
    constructor(
        private router: Router,
        private logger: LoggerService
    ) {
        this.router.events.pipe(
            filter(event => event instanceof NavigationEnd)
        ).subscribe((event: NavigationEnd) => {
            this.logger.info('Route navigation completed', {
                context: { url: event.url }
            });
        });
    }
}

Best Practices

Angular Best Practices

  • Use dependency injection for logger service
  • Implement HTTP interceptors for API request logging
  • Set up global error handlers for unhandled exceptions
  • Log component lifecycle events and user interactions
Previous
Vue.js