Como configurar o syslog para logar no arquivo && buffer

1

Estou usando um sistema operacional Linux embarcado que foi criado usando o yocto. Estou tentando alterar o busybox syslogd para que seja gerado em um arquivo & amortecedor. então eu posso usar logread -f , bem como ter a saída salva em um arquivo para o futuro, caso eu precise olhá-los mais tarde. Agora, o problema que estou vendo é que depois de alterar o arquivo syslogd-startup.conf para o seguinte:

DESTINATION=" file buffer"       # log destinations (buffer file remote)
LOGFILE=/mnt/userrw/sd/logs   # where to log (file)
REMOTE=loghost:514      # where to log (syslog remote)
REDUCE=no           # reduce-size logging
DROPDUPLICATES=no       # whether to drop duplicate log entries
ROTATESIZE=2000           # rotate log if grown beyond X [kByte]
ROTATEGENS=2           # keep X generations of rotated logs
BUFFERSIZE=2000         # size of circular buffer [kByte]
FOREGROUND=no           # run in foreground (don't use!)
#LOGLEVEL=7         # local log level (between 1 and 8)

e, em seguida, executo o comando restart em /etc/init.d/syslog e, em seguida, execute o seguinte comando:

ps aux | grep syslogd

Eu recebo o seguinte confirmando que meus argumentos para o syslogd estão corretos:

ps aux | grep syslogd
root      1648  0.3  1.7   4236  2588 ?        S    14:35   0:00 /sbin/syslogd -n -O /mnt/userrw/sd/logs -s 2000 -b 2 -C2000
root      1671  0.0  0.3   2240   496 pts/0    S+   14:35   0:00 grep syslogd

MAS o problema é que nunca imprime no arquivo. Apenas para o buffer. se eu tirar o arg-C2000 (ou seja, tem DESTINATION = arquivo somente), então ele imprime em um arquivo. Como posso obtê-lo para saída para BOTH file & amortecedor? Isso não é factível? meu arquivo syslogd.conf está vazio. Devo estar usando isso para enviar para o arquivo e usar o syslogd-startup.conf para enviar para o buffer?

    
por JJ Adams 11.06.2018 / 18:56

1 resposta

0

Olhando algumas fontes para syslogd.c em a versão do busybox, parece que isso não é possível. O código apropriado parece ser:

    if (LOG_PRI(pri) < G.logLevel) {
          if ((option_mask32 & OPT_circularlog) && G.shbuf) {
                log_to_shmem(G.printbuf);
                return;
          }
          log_locally(now, G.printbuf, &G.logFile);
    }

Então, se você registrar em buffer, ele retornará sem registro para o arquivo também. Parece um pouco míope. Talvez você possa corrigir seu yocto para remover a declaração return; .

    
por 11.06.2018 / 19:34