Estou respondendo minha própria pergunta.
swatch pode ter funcionado, mas não consegui fazer com que o módulo Sys :: Syslog do perl funcionasse no host, e o / usr / bin / logger instalado no host não suporta o logging para o servidor remoto (util-linux -ng-2.17.2).
Então, a primeira coisa que fiz foi baixar o código-fonte do util-linux-2.20.1 para o qual o programa logger suporta logging remoto. Após o teste, ficou claro que há um limite imposto ao número de caracteres permitidos na linha de registro. Indo para o código-fonte, encontrei um limite de 400 caracteres codificados. (Se você não acredita em mim, execute "strings / usr / bin / logger | grep 400" em qualquer sistema Linux).
Esse limite não é aceitável para o tipo de log do apache (incluindo nodejs), então eu modifiquei o código e aumentei o limite para 4096. Enquanto eu estava nisso, eu também adicionei uma nova opção de linha de comando que permite insira uma string de texto opcional no início de cada linha de log. Eu fiz isso porque os logs do nodejs não incluem o nome do host como alguém poderia ver no apache.
Neste ponto, eu poderia executar um script de shell com "tail -F -n 0 [logfile] | ./modified_logger ...." e funcionou. Mas eu tive algumas preocupações sobre a execução deste de supervise (daemontools) ou mesmo em segundo plano, porque se um ou os outros lados do tubo termina, então há o risco de que o tubo inteiro irá terminar. Eu também tive preocupações (embora não testadas) sobre desempenho.
então decidi combinar a funcionalidade tail com a funcionalidade logger em um único binário executável que contornaria a necessidade de usar pipes Unix ou programas externos. Eu fiz isso hackeando tail.c do gnu coreutils e incorporando o que eu preciso no programa de logger modificado.
O resultado é um novo binário (tamanho 117k) que estou chamando de "filelogger" e que monitora continuamente um ou mais arquivos e registra cada nova linha em um syslog local ou remoto, seja via UDP ou TCP. Ele funciona como um encanto. Eu consegui fazer um pouco de benchmarking e ele registra cerca de 17.000 linhas (1.8MB) em cerca de 3 segundos em sub-redes com uma vlan e alguns switches físicos entre elas, para um servidor remoto que executa o syslog-ng.
para executar o programa, você faz algo como o seguinte (em primeiro plano, plano de fundo ou supervisionado com daemontools):
./ filelogger -t 'access' -d -p local1.info -n [loghost remoto] -u / tmp / ignorado -a $ (hostname) / tmp / myfile1 / tmp / myfile2 ...
/ tmp / myfile1 e / tmp / myfile2 são os arquivos que estão sendo monitorados.
O "-a" é a nova opção que adicionei. Neste caso, insiro o nome do host local no início de cada linha de log.
Esta solução era exatamente o tipo de solução que eu estava procurando quando fiz a pergunta e, como se viu, não existia até que eu mesmo fizesse isso. :)