├── log_file_backend.js ├── logs.js └── log_watcher.js /log_file_backend.js: -------------------------------------------------------------------------------- 1 | var sys = require("sys"), 2 | posix = require("posix"), 3 | filename = "./logs.received", 4 | fd = posix.open(filename, 5 | process.O_WRONLY | process.O_APPEND | process.O_CREAT, 6 | process.S_IRWXU | process.S_IRGRP | process.S_IROTH 7 | ).wait(); 8 | 9 | exports.record_message = function(request, msg) { 10 | posix.write(fd, msg); 11 | } 12 | -------------------------------------------------------------------------------- /logs.js: -------------------------------------------------------------------------------- 1 | var sys = require("sys"), 2 | http = require("http"); 3 | 4 | var backend = (process.ARGV[3]) ? process.ARGV[3] : "./log_file_backend"; 5 | var record_message = require(backend).record_message; 6 | 7 | http.createServer(function (request, response) { 8 | var content = ""; 9 | request.addListener("body", function(chunk) { 10 | content += chunk; 11 | }); 12 | request.addListener("complete", function() { 13 | record_message(request, content); 14 | response.sendHeader(200, {"Content-Type": "text/plain"}); 15 | response.sendBody("stored message (" + content.length + ")"); 16 | response.finish(); 17 | }); 18 | }).listen(8000); 19 | -------------------------------------------------------------------------------- /log_watcher.js: -------------------------------------------------------------------------------- 1 | var sys = require("sys"), 2 | http = require("http"), 3 | file = process.ARGV[3], 4 | hostname = (process.ARGV[4]) ? process.ARGV[4] : "localhost", 5 | port = (process.ARGV[5]) ? parseInt(process.ARGV[5]) : 8000, 6 | log_server = http.createClient(port, hostname); 7 | 8 | sys.puts("sending logs to " + hostname + ":" + port); 9 | 10 | var send_log = function(msg) { 11 | var req = log_server.request("POST", "/", {"Content-Length":msg.length}); 12 | req.sendBody(msg, encoding="ascii"); 13 | req.finish(); 14 | } 15 | 16 | var monitor_file = function(filename) { 17 | sys.puts("monitor_file: monitoring " + filename); 18 | var cmd = process.createChildProcess("tail", ["-F", filename]); 19 | cmd.addListener("output", function(data) { 20 | sys.puts("output: sending (" + data.length + ")"); 21 | send_log(data); 22 | }); 23 | }; 24 | 25 | monitor_file(file); 26 | --------------------------------------------------------------------------------