mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-15 00:01:10 +02:00
🔧 chore: create @manacore/shared-logger and migrate 2 mobile apps
- Create shared logger package with logger, perfLogger, networkLogger - Support both __DEV__ (React Native) and NODE_ENV environments - Migrate manadeck and picture mobile apps to use shared package Savings: ~120 LOC (126 → 10 LOC in apps)
This commit is contained in:
parent
5663c3d3ce
commit
2d16f7c9ff
7 changed files with 254 additions and 129 deletions
|
|
@ -1,33 +1,5 @@
|
|||
/**
|
||||
* Simple logger utility for consistent logging across the app
|
||||
* Can be extended to integrate with crash reporting services
|
||||
* Logger utility - re-exports from shared package
|
||||
* @see @manacore/shared-logger
|
||||
*/
|
||||
|
||||
const isDevelopment = process.env.NODE_ENV === 'development' || __DEV__;
|
||||
|
||||
export const debug = (...args: any[]): void => {
|
||||
if (isDevelopment) {
|
||||
console.debug('[DEBUG]', ...args);
|
||||
}
|
||||
};
|
||||
|
||||
export const info = (...args: any[]): void => {
|
||||
if (isDevelopment) {
|
||||
console.info('[INFO]', ...args);
|
||||
}
|
||||
};
|
||||
|
||||
export const warn = (...args: any[]): void => {
|
||||
console.warn('[WARN]', ...args);
|
||||
};
|
||||
|
||||
export const error = (...args: any[]): void => {
|
||||
console.error('[ERROR]', ...args);
|
||||
// TODO: Send to crash reporting service in production
|
||||
};
|
||||
|
||||
export const log = (...args: any[]): void => {
|
||||
if (isDevelopment) {
|
||||
console.log('[LOG]', ...args);
|
||||
}
|
||||
};
|
||||
export { debug, info, warn, error, log, logger } from '@manacore/shared-logger';
|
||||
|
|
|
|||
|
|
@ -1,91 +1,5 @@
|
|||
/**
|
||||
* Centralized logging utility
|
||||
* - Development: Logs to console
|
||||
* - Production: Logs to console (can be extended for custom error tracking)
|
||||
* Logger utilities - re-exports from shared package
|
||||
* @see @manacore/shared-logger
|
||||
*/
|
||||
|
||||
const isDevelopment = __DEV__;
|
||||
|
||||
export const logger = {
|
||||
/**
|
||||
* Log debug information (only in development)
|
||||
*/
|
||||
debug: (...args: any[]) => {
|
||||
if (isDevelopment) {
|
||||
console.log('[DEBUG]', ...args);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Log general information
|
||||
*/
|
||||
info: (...args: any[]) => {
|
||||
if (isDevelopment) {
|
||||
console.log('[INFO]', ...args);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Log warnings (always logged)
|
||||
*/
|
||||
warn: (...args: any[]) => {
|
||||
console.warn('[WARN]', ...args);
|
||||
// TODO: Send to error tracking service in production
|
||||
},
|
||||
|
||||
/**
|
||||
* Log errors (always logged)
|
||||
*/
|
||||
error: (...args: any[]) => {
|
||||
console.error('[ERROR]', ...args);
|
||||
// In production: can be extended for custom error tracking
|
||||
},
|
||||
|
||||
/**
|
||||
* Log success messages (only in development)
|
||||
*/
|
||||
success: (...args: any[]) => {
|
||||
if (isDevelopment) {
|
||||
console.log('[SUCCESS] ✅', ...args);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Performance logger for measuring execution time
|
||||
*/
|
||||
export const perfLogger = {
|
||||
start: (label: string) => {
|
||||
if (isDevelopment) {
|
||||
console.time(label);
|
||||
}
|
||||
},
|
||||
|
||||
end: (label: string) => {
|
||||
if (isDevelopment) {
|
||||
console.timeEnd(label);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Network request logger
|
||||
*/
|
||||
export const networkLogger = {
|
||||
request: (url: string, method: string, body?: any) => {
|
||||
if (isDevelopment) {
|
||||
console.log(`[NETWORK] ${method} ${url}`, body ? { body } : '');
|
||||
}
|
||||
},
|
||||
|
||||
response: (url: string, status: number, data?: any) => {
|
||||
if (isDevelopment) {
|
||||
console.log(`[NETWORK] Response ${status} from ${url}`, data ? { data } : '');
|
||||
}
|
||||
},
|
||||
|
||||
error: (url: string, error: any) => {
|
||||
console.error(`[NETWORK] Error from ${url}`, error);
|
||||
// TODO: Send to error tracking
|
||||
},
|
||||
};
|
||||
export { logger, perfLogger, networkLogger } from '@manacore/shared-logger';
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
| ~~**MITTEL**~~ | ~~Vite Configs~~ | ~~300 LOC~~ ✅ **~350 LOC entfernt** | ~~Niedrig~~ |
|
||||
| ~~**MITTEL**~~ | ~~Navigation Stores~~ | ~~50 LOC~~ ✅ **~50 LOC entfernt** | ~~Niedrig~~ |
|
||||
| ~~**NIEDRIG**~~ | ~~Drizzle Configs~~ | ~~200 LOC~~ ✅ **~160 LOC entfernt** | ~~Niedrig~~ |
|
||||
| **NIEDRIG** | Logger Utilities | 130 LOC | Niedrig |
|
||||
| ~~**NIEDRIG**~~ | ~~Logger Utilities~~ | ~~130 LOC~~ ✅ **~120 LOC entfernt** | ~~Niedrig~~ |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -393,16 +393,21 @@ export default createDrizzleConfig({ dbName: 'chat' });
|
|||
|
||||
## 5. Utility Functions
|
||||
|
||||
### 5.1 NIEDRIG: Logger Utilities (130 LOC)
|
||||
### ~~5.1 NIEDRIG: Logger Utilities~~ ✅ ERLEDIGT (~120 LOC gespart)
|
||||
|
||||
**Problem:** 2 Mobile Apps haben eigene Logger:
|
||||
- `apps/manadeck/apps/mobile/utils/logger.ts` (34 LOC)
|
||||
- `apps/picture/apps/mobile/utils/logger.ts` (92 LOC - erweitert)
|
||||
**Status:** `@manacore/shared-logger` Package erstellt und 2 Mobile Apps migriert (29.01.2026)
|
||||
|
||||
**Empfehlung:** Erstelle `@manacore/shared-logger` mit:
|
||||
- `logger.debug/info/warn/error/success`
|
||||
- `perfLogger.start/end`
|
||||
- `networkLogger.request/response/error`
|
||||
**Erstelltes Package:** `packages/shared-logger/`
|
||||
- `logger.debug/info/warn/error/success/log` - Standard Logger
|
||||
- `perfLogger.start/end` - Performance-Messung
|
||||
- `networkLogger.request/response/error` - Netzwerk-Debugging
|
||||
- Individuelle Exports für Rückwärtskompatibilität: `debug`, `info`, `warn`, `error`, `log`
|
||||
|
||||
**Migrierte Apps:**
|
||||
- ✅ `apps/manadeck/apps/mobile/utils/logger.ts` (34 → 5 LOC)
|
||||
- ✅ `apps/picture/apps/mobile/utils/logger.ts` (92 → 5 LOC)
|
||||
|
||||
**Einsparung:** ~120 LOC (126 → 10 LOC, Shared Package: 100 LOC reusable)
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
21
packages/shared-logger/package.json
Normal file
21
packages/shared-logger/package.json
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"name": "@manacore/shared-logger",
|
||||
"version": "1.0.0",
|
||||
"description": "Shared logging utilities for ManaCore mobile and web apps",
|
||||
"type": "module",
|
||||
"main": "./src/index.ts",
|
||||
"types": "./src/index.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./src/index.ts",
|
||||
"import": "./src/index.ts",
|
||||
"default": "./src/index.ts"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"type-check": "tsc --noEmit"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.7.2"
|
||||
}
|
||||
}
|
||||
108
packages/shared-logger/src/index.ts
Normal file
108
packages/shared-logger/src/index.ts
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
/**
|
||||
* Shared Logger Utilities for ManaCore Apps
|
||||
* Provides consistent logging across mobile and web applications.
|
||||
*/
|
||||
|
||||
// Check if we're in development mode
|
||||
// Works in both React Native (__DEV__) and Node.js environments
|
||||
declare const __DEV__: boolean | undefined;
|
||||
const isDevelopment =
|
||||
typeof __DEV__ !== 'undefined' ? __DEV__ : process.env.NODE_ENV === 'development';
|
||||
|
||||
/**
|
||||
* Main logger object with standard log levels.
|
||||
* Debug and info only log in development mode.
|
||||
* Warn and error always log.
|
||||
*/
|
||||
export const logger = {
|
||||
/** Log debug information (only in development) */
|
||||
debug: (...args: unknown[]): void => {
|
||||
if (isDevelopment) {
|
||||
console.debug('[DEBUG]', ...args);
|
||||
}
|
||||
},
|
||||
|
||||
/** Log general information (only in development) */
|
||||
info: (...args: unknown[]): void => {
|
||||
if (isDevelopment) {
|
||||
console.info('[INFO]', ...args);
|
||||
}
|
||||
},
|
||||
|
||||
/** Log warnings (always logged) */
|
||||
warn: (...args: unknown[]): void => {
|
||||
console.warn('[WARN]', ...args);
|
||||
},
|
||||
|
||||
/** Log errors (always logged) */
|
||||
error: (...args: unknown[]): void => {
|
||||
console.error('[ERROR]', ...args);
|
||||
},
|
||||
|
||||
/** Log success messages (only in development) */
|
||||
success: (...args: unknown[]): void => {
|
||||
if (isDevelopment) {
|
||||
console.log('[SUCCESS]', ...args);
|
||||
}
|
||||
},
|
||||
|
||||
/** General log (only in development) */
|
||||
log: (...args: unknown[]): void => {
|
||||
if (isDevelopment) {
|
||||
console.log('[LOG]', ...args);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Performance logger for measuring execution time.
|
||||
* Only logs in development mode.
|
||||
*/
|
||||
export const perfLogger = {
|
||||
/** Start a performance timer with a label */
|
||||
start: (label: string): void => {
|
||||
if (isDevelopment) {
|
||||
console.time(label);
|
||||
}
|
||||
},
|
||||
|
||||
/** End a performance timer and log the duration */
|
||||
end: (label: string): void => {
|
||||
if (isDevelopment) {
|
||||
console.timeEnd(label);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Network request logger for API debugging.
|
||||
* Request and response only log in development.
|
||||
* Errors always log.
|
||||
*/
|
||||
export const networkLogger = {
|
||||
/** Log an outgoing network request */
|
||||
request: (url: string, method: string, body?: unknown): void => {
|
||||
if (isDevelopment) {
|
||||
console.log(`[NETWORK] ${method} ${url}`, body ? { body } : '');
|
||||
}
|
||||
},
|
||||
|
||||
/** Log a network response */
|
||||
response: (url: string, status: number, data?: unknown): void => {
|
||||
if (isDevelopment) {
|
||||
console.log(`[NETWORK] Response ${status} from ${url}`, data ? { data } : '');
|
||||
}
|
||||
},
|
||||
|
||||
/** Log a network error (always logged) */
|
||||
error: (url: string, error: unknown): void => {
|
||||
console.error(`[NETWORK] Error from ${url}`, error);
|
||||
},
|
||||
};
|
||||
|
||||
// Individual function exports for backwards compatibility with manadeck pattern
|
||||
export const debug = logger.debug;
|
||||
export const info = logger.info;
|
||||
export const warn = logger.warn;
|
||||
export const error = logger.error;
|
||||
export const log = logger.log;
|
||||
14
packages/shared-logger/tsconfig.json
Normal file
14
packages/shared-logger/tsconfig.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "bundler",
|
||||
"esModuleInterop": true,
|
||||
"strict": true,
|
||||
"skipLibCheck": true,
|
||||
"declaration": true,
|
||||
"outDir": "./dist",
|
||||
"rootDir": "./src"
|
||||
},
|
||||
"include": ["src/**/*"]
|
||||
}
|
||||
91
pnpm-lock.yaml
generated
91
pnpm-lock.yaml
generated
|
|
@ -4780,6 +4780,12 @@ importers:
|
|||
specifier: ^5.0.0
|
||||
version: 5.9.3
|
||||
|
||||
packages/shared-logger:
|
||||
devDependencies:
|
||||
typescript:
|
||||
specifier: ^5.7.2
|
||||
version: 5.9.3
|
||||
|
||||
packages/shared-nestjs-auth:
|
||||
devDependencies:
|
||||
'@nestjs/common':
|
||||
|
|
@ -5041,6 +5047,91 @@ importers:
|
|||
specifier: ^5.9.3
|
||||
version: 5.9.3
|
||||
|
||||
services/mana-api-gateway:
|
||||
dependencies:
|
||||
'@manacore/shared-nestjs-auth':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/shared-nestjs-auth
|
||||
'@nestjs/common':
|
||||
specifier: ^10.4.17
|
||||
version: 10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)
|
||||
'@nestjs/config':
|
||||
specifier: ^3.3.0
|
||||
version: 3.3.0(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)
|
||||
'@nestjs/core':
|
||||
specifier: ^10.4.17
|
||||
version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(@nestjs/websockets@10.4.20)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.2)
|
||||
'@nestjs/platform-express':
|
||||
specifier: ^10.4.17
|
||||
version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)
|
||||
class-transformer:
|
||||
specifier: ^0.5.1
|
||||
version: 0.5.1
|
||||
class-validator:
|
||||
specifier: ^0.14.1
|
||||
version: 0.14.3
|
||||
drizzle-orm:
|
||||
specifier: ^0.38.4
|
||||
version: 0.38.4(@opentelemetry/api@1.9.0)(@types/react@19.2.7)(expo-sqlite@15.2.14(expo@54.0.25)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.2.7)(react@19.1.0))(react@19.1.0))(kysely@0.28.8)(postgres@3.4.7)(react@19.1.0)
|
||||
ioredis:
|
||||
specifier: ^5.4.2
|
||||
version: 5.8.2
|
||||
multer:
|
||||
specifier: ^1.4.5-lts.1
|
||||
version: 1.4.5-lts.2
|
||||
postgres:
|
||||
specifier: ^3.4.5
|
||||
version: 3.4.7
|
||||
prom-client:
|
||||
specifier: ^15.1.3
|
||||
version: 15.1.3
|
||||
reflect-metadata:
|
||||
specifier: ^0.2.2
|
||||
version: 0.2.2
|
||||
rxjs:
|
||||
specifier: ^7.8.1
|
||||
version: 7.8.2
|
||||
devDependencies:
|
||||
'@manacore/shared-drizzle-config':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/shared-drizzle-config
|
||||
'@nestjs/cli':
|
||||
specifier: ^10.4.9
|
||||
version: 10.4.9
|
||||
'@nestjs/schematics':
|
||||
specifier: ^10.2.3
|
||||
version: 10.2.3(chokidar@3.6.0)(typescript@5.9.3)
|
||||
'@nestjs/testing':
|
||||
specifier: ^10.4.17
|
||||
version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(@nestjs/platform-express@10.4.20)
|
||||
'@types/express':
|
||||
specifier: ^5.0.0
|
||||
version: 5.0.5
|
||||
'@types/multer':
|
||||
specifier: ^1.4.12
|
||||
version: 1.4.13
|
||||
'@types/node':
|
||||
specifier: ^22.10.7
|
||||
version: 22.19.1
|
||||
drizzle-kit:
|
||||
specifier: ^0.30.4
|
||||
version: 0.30.6
|
||||
jest:
|
||||
specifier: ^29.7.0
|
||||
version: 29.7.0(@types/node@22.19.1)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3))
|
||||
ts-jest:
|
||||
specifier: ^29.2.5
|
||||
version: 29.4.5(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(esbuild@0.19.12)(jest-util@30.2.0)(jest@29.7.0(@types/node@22.19.1)(ts-node@10.9.2(@types/node@22.19.1)(typescript@5.9.3)))(typescript@5.9.3)
|
||||
ts-node:
|
||||
specifier: ^10.9.2
|
||||
version: 10.9.2(@types/node@22.19.1)(typescript@5.9.3)
|
||||
tsx:
|
||||
specifier: ^4.19.2
|
||||
version: 4.20.6
|
||||
typescript:
|
||||
specifier: ^5.7.3
|
||||
version: 5.9.3
|
||||
|
||||
services/mana-core-auth:
|
||||
dependencies:
|
||||
'@google/generative-ai':
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue