logixlysia
Version:
🦊 Logixlysia is a logger for Elysia
86 lines (85 loc) • 2.82 kB
TypeScript
import { Elysia } from "elysia";
interface RequestInfo {
headers: {
get: (key: string) => string | null
};
method: string;
url: string;
}
type LogLevel = "DEBUG" | "INFO" | "WARNING" | "ERROR" | string;
interface LogData {
status?: number;
message?: string;
context?: Record<string, string | number | boolean | null>;
stack?: string;
metrics?: {
memoryUsage?: number
cpuUsage?: number
responseSize?: number
};
}
interface Logger {
store?: StoreData;
log(level: LogLevel, request: RequestInfo, data: LogData, store: StoreData): void;
handleHttpError(request: RequestInfo, error: HttpError, store: StoreData): void;
customLogFormat?: string;
info(request: RequestInfo, message: string, context?: Record<string, string | number | boolean | null>, store?: StoreData): void;
error(request: RequestInfo, message: string, context?: Record<string, string | number | boolean | null>, store?: StoreData): void;
warn(request: RequestInfo, message: string, context?: Record<string, string | number | boolean | null>, store?: StoreData): void;
debug(request: RequestInfo, message: string, context?: Record<string, string | number | boolean | null>, store?: StoreData): void;
}
interface StoreData {
beforeTime: bigint;
logger?: Logger;
hasCustomLog?: boolean;
}
interface LogixlysiaContext {
store: {
logger: Logger
beforeTime: bigint
hasCustomLog: boolean
};
request: RequestInfo;
}
declare class HttpError extends Error {
status: number;
constructor(status: number, message: string);
}
type TransportFunction = (level: LogLevel, message: string, meta: {
request: RequestInfo
data: LogData
store: StoreData
}) => Promise<void> | void;
interface Transport {
log: TransportFunction;
}
interface TimestampConfig {
translateTime?: boolean | string;
}
interface Options {
config?: {
customLogFormat?: string
logFilePath?: string
logRotation?: {
maxSize?: number
maxFiles?: number
compress?: boolean
}
logFilter?: {
level?: LogLevel | LogLevel[]
method?: string | string[]
status?: number | number[]
} | null
ip?: boolean
useColors?: boolean
showStartupMessage?: boolean
startupMessageFormat?: "banner" | "simple"
transports?: Transport[]
timestamp?: TimestampConfig
};
}
declare function createLogger(options?: Options): Logger;
declare function handleHttpError2(request: RequestInfo, error: HttpError, store: StoreData, options?: Options): void;
declare function logToTransports(level: LogLevel, request: RequestInfo, data: LogData, store: StoreData, options?: Options): Promise<void>;
declare function logixlysia(options?: Options): Elysia;
export { logToTransports, handleHttpError2 as handleHttpError, logixlysia as default, createLogger, Transport, StoreData, RequestInfo, Options, LogixlysiaContext, Logger, LogLevel, LogData, HttpError };