export interface LoggerMeta {
  authentication?: {
    oauthClient?: string;
    userId?: string;
    ip?: string;
  };
  correlationId?: string;
  enterprise?: string;
  environment?: string;
  extra?: object | string;
  request?: {
    body?: object | string;
    headers?: object | string;
    url: string;
  };
  sessionId?: string;
  error?: Error;
}

export type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal" | "emerg";

export interface Logger {
  log: (level: LogLevel, message: string, meta?: LoggerMeta) => void;
  trace: (message: string, meta?: LoggerMeta) => void;
  debug: (message: string, meta?: LoggerMeta) => void;
  info: (message: string, meta?: LoggerMeta) => void;
  warn: (message: string, meta?: LoggerMeta) => void;
  error: (message: string, meta?: LoggerMeta) => void;
  fatal: (message: string, meta?: LoggerMeta) => void;
  emerg: (message: string, meta?: LoggerMeta) => void;
  child: (childMeta?: LoggerMeta) => Logger;
}
