Итак, я написал сервис, который проверяет возможные существующие журналы и, если они там есть, переименовывает его с возрастающим целым числом, а затем добавляет новый журнал для записи, например так:
async function moveLogs( path, i ){
if( i == 10 ){
fs.unlinkSync( path + '.' + i )
} else {
let j = i + 1
if( fs.existsSync( path + '.' + j ) ) {
await moveLogs( path, j )
}
// Then move the log
if( i == 0 ){
await fs.renameSync( path, path+'.'+j )
makeFile( path ) // Make new empty file if doesnt exist
} else {
await fs.renameSync( path+'.'+i, path+'.'+j )
}
}
}
Однакослужба, которая записывает в журнал, все еще записывает в старый, теперь переименованный, журнал.регистратор является доморощенным регистратором, который использует fs.createWriteStream при инициализации и затем записывает в файл всякий раз, когда вызывается присоединенная функция записи:
class Log_Wrap{
constructor( min_level, critical = false ){
if( critical ){
this.log = fs.createWriteStream( process.env.CRITICAL_PATH + min_level.toLowerCase() + '.log', {flags : 'a'})
} else {
this.log = fs.createWriteStream( process.env.LOG_PATH + min_level.toLowerCase() + '.log', {flags : 'a'})
}
var lev = [ true, true, true, true, true, true, true, true ]
for (var i = 0; i < log_level.indexOf( min_level.toUpperCase() ); i++){
lev[i] = false
}
this.level = lev
}
}
...
_write( functionName, level, ...out ) {
this.log.write( '[' + moment().format('YYYY-MM-DD HH:mm:ss') + '] ' + functionName + '.' + level.toUpperCase() + ': ' )
out.forEach( term => {
this.log.write( util.format( term ) ) } )
this.log.write( '\n' )
}
, а затем Logger является объектом, который содержит массив Log_Wrap,и пишет, используя:
write( level, functionName, ...out ){
for( var i = 0; i < this.loggers.length; i++ ){
if ( this.loggers[i].canLog( level.toUpperCase() ) ){
this.loggers[i]._write( functionName, level, ...out )
}
}
}
Итак, я предполагаю, что вопрос заключается в следующем: я должен реструктурировать, как работает регистратор, или есть способ циклически завершить запись журнала в?