const fs = require('fs');
const path = require('path');
const moment = require('moment'); // For timestamping backup files
/**
* Backs up log files to a specified directory.
* @param {string} logDirectory - The directory containing the log files.
* @param {string} backupDirectory - The directory to store the backups.
* @param {number} backupRetentionDays - The number of days to keep backups.
*/
function backupLogs(logDirectory, backupDirectory, backupRetentionDays) {
// Ensure backup directory exists
if (!fs.existsSync(backupDirectory)) {
fs.mkdirSync(backupDirectory);
}
const now = moment();
const cutoffDate = now.subtract(backupRetentionDays, 'days').toDate();
// Read files in the log directory
fs.readdir(logDirectory, (err, files) => {
if (err) {
console.error('Error reading log directory:', err);
return;
}
files.forEach(file => {
const filePath = path.join(logDirectory, file);
//Check if it's a file (not a directory)
fs.stat(filePath, (err, stats) => {
if (err) {
console.error('Error getting file stats:', err);
return;
}
if (stats.isFile()) {
// Generate backup filename with timestamp
const timestamp = moment().format('YYYYMMDDHHmmss');
const backupFileName = `backup_${file}_${timestamp}`;
const backupFilePath = path.join(backupDirectory, backupFileName);
try {
// Copy the file to the backup directory
fs.copyFileSync(filePath, backupFilePath);
console.log(`Backed up ${file} to ${backupFilePath}`);
// Optionally, delete backups older than the retention period
const lastModified = stats.mtime;
if (lastModified < cutoffDate) {
fs.unlinkSync(backupFilePath);
console.log(`Deleted old backup ${backupFilePath}`);
}
} catch (copyErr) {
console.error(`Error backing up ${file}:`, copyErr);
}
}
});
});
});
}
// Example Usage (replace with your actual directories and retention period)
const logDirectory = '/path/to/your/logs'; // Replace with your log directory
const backupDirectory = '/path/to/your/backups'; // Replace with your backup directory
const backupRetentionDays = 7; // Keep backups for 7 days
backupLogs(logDirectory, backupDirectory, backupRetentionDays);
Add your comment