104997d77c
docker is using a extra udp port for every container. when there is a lot of containers, a lot of random udp ports get used up. this causes problems when installing apps that require contiguous port ranges
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
exports = module.exports = {
|
|
start,
|
|
stop
|
|
};
|
|
|
|
const LOG_FILENAME = 'app.log';
|
|
|
|
const assert = require('assert'),
|
|
debug = require('debug')('syslog:server'),
|
|
fs = require('fs'),
|
|
net = require('net'),
|
|
path = require('path'),
|
|
parser = require('nsyslog-parser'),
|
|
util = require('util');
|
|
|
|
let server = null;
|
|
|
|
async function start(options) {
|
|
assert.strictEqual(typeof options, 'object');
|
|
assert.strictEqual(typeof options.logFolder, 'string');
|
|
|
|
debug('==========================================');
|
|
debug(' Cloudron Syslog Daemon ');
|
|
debug('==========================================');
|
|
|
|
server = net.createServer();
|
|
|
|
server.on('error', function (error) {
|
|
console.error(`server error: ${error}`);
|
|
});
|
|
|
|
server.on('connection', function (socket) {
|
|
socket.on('data', function (msg) {
|
|
const info = parser(msg.toString());
|
|
|
|
if (!info || !info.appName) return debug('Ignore unknown app log:', msg.toString());
|
|
|
|
// remove line breaks to avoid holes in the log file
|
|
// we do not ignore empty log lines, to allow gaps for potential ease of readability
|
|
const message = info.message.replace(/\n/g, '');
|
|
|
|
const filePath = path.join(options.logFolder, info.appName);
|
|
const fileName = path.join(filePath, LOG_FILENAME);
|
|
|
|
try {
|
|
fs.mkdirSync(filePath, { recursive: true });
|
|
fs.appendFileSync(fileName, info.ts.toISOString() + ' ' + message + '\n');
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
});
|
|
|
|
socket.on('error', function (error) {
|
|
console.error(`socket error: ${error}`);
|
|
});
|
|
});
|
|
|
|
await fs.promises.rm('/home/yellowtent/platformdata/logs/syslog.sock', { force: true });
|
|
await util.promisify(server.listen.bind(server))('/home/yellowtent/platformdata/logs/syslog.sock');
|
|
|
|
debug('Listening on syslog.sock');
|
|
}
|
|
|
|
async function stop() {
|
|
if (!server) return;
|
|
await util.promisify(server.close.bind(server))();
|
|
server = null;
|
|
}
|