파일 및 버퍼에 기록하도록 syslog를 설정하는 방법

파일 및 버퍼에 기록하도록 syslog를 설정하는 방법

저는 yocto를 사용하여 구축된 임베디드 Linux 운영 체제를 사용하고 있습니다. busybox syslogd를 파일과 버퍼로 출력하도록 변경하려고 합니다. 이렇게 하면 logread -f나중에 볼 필요가 있을 경우를 대비하여 출력을 사용하고 파일에 저장할 수 있습니다. 이제 내가 보는 문제는 syslogd-startup.conf 파일을 다음과 같이 변경한 후입니다.

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)

그런 다음 재부팅 명령을 실행 /etc/init.d/syslog하고 다음을 실행했습니다.

ps aux | grep syslogd

syslogd의 매개변수가 올바른지 확인하는 다음 메시지가 나타납니다.

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

그러나 문제는 파일에 인쇄되지 않는다는 것입니다. 버퍼에만 해당됩니다. -C2000 인수를 꺼내면(즉, DESTINATION=file만 있으면) 파일로 인쇄됩니다. 파일과 버퍼로 출력하려면 어떻게 해야 합니까? 이게 가능하지 않나요? 내 syslogd.conf 파일이 비어 있습니다. 이것을 파일로 출력하고 syslogd-startup.conf를 사용하여 버퍼로 출력해야 합니까?

답변1

일부 소스를 확인해 보세요.시스템 로그 파일존재하다busybox 버전에서는 이것이 불가능한 것 같습니다. 적절한 코드는 다음과 같습니다.

    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);
    }

따라서 버퍼에 기록하면 파일에 기록하지 않고 반환됩니다. 조금 근시안적인 것 같습니다. 아마도 yocto를 패치하여 해당 return;명령문을 제거할 수 있을 것입니다.

관련 정보