Security Hardening
This commit is contained in:
66
src/utils/logger.js
Normal file
66
src/utils/logger.js
Normal file
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* Production-safe logging utility
|
||||
*
|
||||
* In production (NODE_ENV=production), logs are disabled by default
|
||||
* to prevent exposing sensitive information in browser console.
|
||||
*
|
||||
* In development, all logs are shown for debugging.
|
||||
*
|
||||
* Usage:
|
||||
* import logger from '../utils/logger';
|
||||
* logger.log('[Component]', 'message', data);
|
||||
* logger.error('[Component]', 'error message', error);
|
||||
* logger.warn('[Component]', 'warning message');
|
||||
*/
|
||||
|
||||
const isDevelopment = process.env.NODE_ENV === 'development';
|
||||
|
||||
// Force enable logs with REACT_APP_DEBUG_LOGS=true in .env
|
||||
const debugEnabled = process.env.REACT_APP_DEBUG_LOGS === 'true';
|
||||
|
||||
const shouldLog = isDevelopment || debugEnabled;
|
||||
|
||||
const logger = {
|
||||
log: (...args) => {
|
||||
if (shouldLog) {
|
||||
console.log(...args);
|
||||
}
|
||||
},
|
||||
|
||||
error: (...args) => {
|
||||
// Always log errors, but sanitize in production
|
||||
if (shouldLog) {
|
||||
console.error(...args);
|
||||
} else {
|
||||
// In production, only log error type without details
|
||||
console.error('An error occurred. Enable debug logs for details.');
|
||||
}
|
||||
},
|
||||
|
||||
warn: (...args) => {
|
||||
if (shouldLog) {
|
||||
console.warn(...args);
|
||||
}
|
||||
},
|
||||
|
||||
info: (...args) => {
|
||||
if (shouldLog) {
|
||||
console.info(...args);
|
||||
}
|
||||
},
|
||||
|
||||
debug: (...args) => {
|
||||
if (shouldLog) {
|
||||
console.debug(...args);
|
||||
}
|
||||
},
|
||||
|
||||
// Special method for sensitive data - NEVER logs in production
|
||||
sensitive: (...args) => {
|
||||
if (isDevelopment) {
|
||||
console.log('[SENSITIVE]', ...args);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default logger;
|
||||
Reference in New Issue
Block a user