Fix logger for Azure App Service and update deployment docs
- Fix logger to handle Azure App Service write restrictions - Skip file logging in Azure App Service (console logs captured automatically) - Add deployment scripts for App Service setup - Update documentation with correct resource names - Add Key Vault access request documentation - Add alternative authentication methods for ACR and Key Vault
This commit is contained in:
@@ -1,5 +1,12 @@
|
||||
import winston from 'winston';
|
||||
import { config } from '../config/env.js';
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { dirname } from 'path';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
const { combine, timestamp, printf, colorize, errors } = winston.format;
|
||||
|
||||
@@ -25,16 +32,45 @@ export const logger = winston.createLogger({
|
||||
],
|
||||
});
|
||||
|
||||
if (config.isProduction) {
|
||||
logger.add(
|
||||
new winston.transports.File({
|
||||
filename: 'logs/error.log',
|
||||
level: 'error',
|
||||
})
|
||||
);
|
||||
logger.add(
|
||||
new winston.transports.File({
|
||||
filename: 'logs/combined.log',
|
||||
})
|
||||
);
|
||||
// Only add file logging if we're in production AND have write permissions
|
||||
// In Azure App Service, console logging is automatically captured, so file logging is optional
|
||||
if (config.isProduction && !process.env.AZURE_APP_SERVICE) {
|
||||
// For non-Azure environments, try to use logs/ directory
|
||||
const logDir = path.join(__dirname, '../../logs');
|
||||
|
||||
try {
|
||||
// Ensure directory exists
|
||||
if (!fs.existsSync(logDir)) {
|
||||
fs.mkdirSync(logDir, { recursive: true });
|
||||
}
|
||||
|
||||
// Test write permissions
|
||||
const testFile = path.join(logDir, '.write-test');
|
||||
try {
|
||||
fs.writeFileSync(testFile, 'test');
|
||||
fs.unlinkSync(testFile);
|
||||
|
||||
// If we can write, add file transports
|
||||
logger.add(
|
||||
new winston.transports.File({
|
||||
filename: path.join(logDir, 'error.log'),
|
||||
level: 'error',
|
||||
})
|
||||
);
|
||||
logger.add(
|
||||
new winston.transports.File({
|
||||
filename: path.join(logDir, 'combined.log'),
|
||||
})
|
||||
);
|
||||
} catch (writeError) {
|
||||
// Can't write to this directory, skip file logging
|
||||
// Console logging will be used (which is fine for Azure App Service)
|
||||
console.warn('File logging disabled: no write permissions. Using console logging only.');
|
||||
}
|
||||
} catch (dirError) {
|
||||
// Can't create directory, skip file logging
|
||||
console.warn('File logging disabled: cannot create log directory. Using console logging only.');
|
||||
}
|
||||
}
|
||||
// In Azure App Service, console logs are automatically captured by Azure Monitor
|
||||
// No need for file logging
|
||||
|
||||
Reference in New Issue
Block a user