feat: implement structured logging for server and client
Server: - Add pino and pino-http for structured logging - Create @Logged class decorator using Proxy pattern for automatic method logging - Add pino redact config for sensitive data (password, token, etc.) - Move AuthMiddleware to controllers folder (per architecture diagram) - Add LoggingMiddleware for HTTP request logging - Replace console.log/error with structured logger in controllers and app.ts - Decorate all repositories and GPTAdapter with @Logged Client: - Add react-native-logs with namespaced loggers (apiLogger, storeLogger) - Add request/response logging to ApiClient with duration tracking
This commit is contained in:
43
apps/server/src/logging/logger.ts
Normal file
43
apps/server/src/logging/logger.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import pino from "pino";
|
||||
|
||||
const isDevelopment = process.env.NODE_ENV !== "production";
|
||||
|
||||
export const logger = pino({
|
||||
level: process.env.LOG_LEVEL || (isDevelopment ? "debug" : "info"),
|
||||
redact: {
|
||||
paths: [
|
||||
// Root level
|
||||
"password",
|
||||
"passwordHash",
|
||||
"token",
|
||||
// One level deep (e.g. user.password)
|
||||
"*.password",
|
||||
"*.passwordHash",
|
||||
"*.token",
|
||||
// In arrays (for 'args' in decorator)
|
||||
"args[*].password",
|
||||
"args[*].passwordHash",
|
||||
"args[*].token",
|
||||
],
|
||||
censor: "[REDACTED]",
|
||||
},
|
||||
transport: isDevelopment
|
||||
? {
|
||||
target: "pino-pretty",
|
||||
options: {
|
||||
colorize: true,
|
||||
translateTime: "SYS:HH:MM:ss",
|
||||
ignore: "pid,hostname",
|
||||
},
|
||||
}
|
||||
: undefined,
|
||||
base: {
|
||||
service: "caldav-server",
|
||||
},
|
||||
});
|
||||
|
||||
export function createLogger(module: string) {
|
||||
return logger.child({ module });
|
||||
}
|
||||
|
||||
export type Logger = pino.Logger;
|
||||
Reference in New Issue
Block a user