Flexible and powerful logger for TypeScript projects with visual and console modes
npm install smart-logger-tsREADME.md
π οΈ Smart Logger β ΡΡΠΎ Π³ΠΈΠ±ΠΊΠ°Ρ ΠΈ ΠΌΠΎΡΠ½Π°Ρ TypeScript-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΌ ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π»ΠΎΠ³ΠΎΠ².
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ npm ΠΈΠ»ΠΈ yarn:
``bash
npm install smart-logger-ts
ΠΈΠ»ΠΈ
yarn add smart-logger-ts
`
π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Smart Logger ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ:
Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΡ Π»ΠΎΠ³Π³Π΅ΡΡ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ ΡΠ²Π΅ΡΠ°ΠΌΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΌ ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π»ΠΎΠ³ΠΎΠ².
Π£ΠΏΡΠ°Π²Π»ΡΡΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ: Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΈ Π²ΡΠΊΠ»ΡΡΠ°ΡΡ Π²ΡΠ²ΠΎΠ΄ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΈΠ±ΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π»ΠΎΠ³ΠΎΠ².
π ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
1. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π»ΠΎΠ³Π³Π΅ΡΠ°
`
import { initLoggerConfig } from 'smart-logger-ts';
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π»ΠΎΠ³Π³Π΅ΡΠΎΠ² Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ
const { useLogger, switchLoggerMode } = initLoggerConfig(
{
ADS: { name: 'ADS Module', color: '#DAA520' },
STREAM: { name: 'Stream Module', color: '#FFDAB9' },
BASE: { name: 'Base Module', color: '#708090' },
CUSTOM: { name: 'Custom Module', color: '#FF69B4' },
},
{
maxMessages: 50,
containerStyles: { backgroundColor: '#f0f0f0', padding: '10px' },
logStyles: { color: '#000' },
}
);
`
2. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠ³Π³Π΅ΡΠ°
`
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π»ΠΎΠ³Π³Π΅Ρ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ
const adsLogger = useLogger('ADS');
// ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
adsLogger.logMsg('ΠΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ ADS');
adsLogger.logInfo('ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ ADS');
adsLogger.logWarn('ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ ADS');
adsLogger.logErr('ΠΡΠΈΠ±ΠΊΠ° Π² ΠΌΠΎΠ΄ΡΠ»Π΅ ADS');
// ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΠ° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ
switchLoggerMode('visual');
adsLogger.logMsg('Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅');
switchLoggerMode('console');
adsLogger.logMsg('Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ');
`
3. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π»ΠΎΠ³Π³Π΅ΡΠ°ΠΌ ΡΠ΅ΡΠ΅Π· Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
``
window.useLogger('CUSTOM').logMsg('Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ');
window.switchLoggerMode('visual');
βοΈ API
βοΈ initLoggerConfig(config, loggerOptions?)
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π»ΠΎΠ³Π³Π΅ΡΠΎΠ².
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
config β ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°:
name: string β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ.
color: string β ΡΠ²Π΅Ρ Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
loggerOptions (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) β Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ:
maxMessages: number β ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅.
containerStyles: Partial
logStyles: Partial
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ: { useLogger, switchLoggerMode }
βοΈ useLogger(scope, isEnabled?)
Π‘ΠΎΠ·Π΄Π°Π΅Ρ Π»ΠΎΠ³Π³Π΅Ρ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
scope: string β ΠΊΠ»ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
isEnabled: boolean (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) β Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ true).
ΠΠ΅ΡΠΎΠ΄Ρ Π»ΠΎΠ³Π³Π΅ΡΠ°:
logMsg(...args) β ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
logInfo(...args) β ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
logWarn(...args) β ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅.
logErr(...args) β ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
switchLogger(state: boolean) β Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅/ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
βοΈ switchLoggerMode(mode)
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
mode: 'console' | 'visual' β ΡΠ΅ΠΆΠΈΠΌ Π²ΡΠ²ΠΎΠ΄Π° Π»ΠΎΠ³ΠΎΠ².
π ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ
`
import { initLoggerConfig } from 'smart-logger-ts';
const { useLogger, switchLoggerMode } = initLoggerConfig(
{
ANALYTICS: { name: 'Analytics Module', color: '#32CD32' },
},
{
maxMessages: 30,
containerStyles: { backgroundColor: '#fff', border: '1px solid #ddd' },
logStyles: { fontSize: '14px', color: '#333' },
}
);
const analyticsLogger = useLogger('ANALYTICS');
analyticsLogger.logInfo('ΠΠΎΠ³ ΠΈΠ· Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ');
`
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ
`
switchLoggerMode('visual');
analyticsLogger.logMsg('Π’Π΅ΠΏΠ΅ΡΡ Π»ΠΎΠ³ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅');
switchLoggerMode('console');
analyticsLogger.logMsg('Π’Π΅ΠΏΠ΅ΡΡ Π»ΠΎΠ³ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ');
``
π ΠΠΈΡΠ΅Π½Π·ΠΈΡ
MIT License. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ .
π₯ ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ issue Π½Π° GitHub.
π ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΠΎΡΡΠ°Π²ΡΡΠ΅ Π·Π²ΡΠ·Π΄ΠΎΡΠΊΡ Π½Π° GitHub ΠΈ ΠΎΡΡΠ°Π²ΡΡΠ΅ ΠΎΡΠ·ΡΠ² Π½Π° npm.