리눅스에서 c 언어로 된 라이브러리 함수 또는 시스템 호출의 도움으로 / var / log /에 일부 데이터를 유지하기 위해 로그 파일을 만드는 방법이 있습니까? 또한 로그를 작성하고 처리하기 위해 따라야하는 표준을 알고 싶습니다. 감사
리눅스에서 c 언어로 된 라이브러리 함수 또는 시스템 호출의 도움으로 / var / log /에 일부 데이터를 유지하기 위해 로그 파일을 만드는 방법이 있습니까? 또한 로그를 작성하고 처리하기 위해 따라야하는 표준을 알고 싶습니다. 감사
답변:
C 프로그램에서 로그하는 표준 방법은 syslog
입니다.
헤더 파일을 포함시켜 시작하십시오.
#include <syslog.h>
그런 다음 프로그램 초기에 다음을 호출하여 syslog를 구성해야합니다 openlog
.
openlog("programname", 0, LOG_USER);
첫 번째 인수는 식별 또는 태그이며, 각 메시지 시작시 자동으로 추가됩니다. 여기에 프로그램 이름을 입력하십시오.
두 번째 인수는 사용하려는 옵션 또는 0
정상적인 동작입니다. 전체 옵션 목록은에 있습니다 man 3 syslog
. 유용하다고 생각되는 것은 LOG_PID
syslog가 프로세스 ID를 로그 메시지에 기록하도록하는 것입니다.
그런 다음 로그 메시지를 작성할 때마다 다음을 호출합니다 syslog
.
syslog(LOG_INFO, "%s", "Message");
첫 번째 주장은 우선 순위입니다. 행 범위 우선 순위 DEBUG
(가장 중요한) 행 EMERG
과 (비상시에만)를 DEBUG
, INFO
그리고 ERR
가장 일반적으로 사용된다. man 3 syslog
옵션을 참조하십시오 .
두 번째와 세 번째 인수는 printf와 마찬가지로 형식과 메시지입니다.
표시되는 로그 파일은 syslog 설정에 따라 다릅니다.
기본 설정을 사용하면 아마도로 들어갑니다 /var/log/messages
.
당신은 범위에있는 시설 중 하나를 사용하여 사용자 정의 로그 파일을 설정할 수 있습니다 LOG_LOCAL0
로를 LOG_LOCAL7
.
다음을 변경하여 사용하십시오.
openlog("programname", 0, LOG_USER);
에
openlog("programname", 0, LOG_LOCAL0);
또는
openlog("programname", 0, LOG_LOCAL1);
기타
및 대응하는 항목을 추가하는 /etc/syslog.conf
예
local1.info /var/log/programname.log
syslog 서버 재시작
pkill -HUP syslogd
.info
의 일부로 local1.info
모든 메시지 것을 위의 수단을 INFO
포함 시키거나 더 중요한이 기록됩니다, INFO
, NOTICE
, ERR
, (오류) CRIT
등 (중요),하지만 DEBUG
.
또는 당신이있는 경우에 rsyslog
, 당신이 시도 할 수있는 특성 기반의 필터를 , 예를 들어,
:syslogtag, isequal, "programname:" /var/log/programname.log
또는 소프트웨어를 다른 사람에게 배포하려는 경우 LOG_LOCAL
또는 rsyslog
필터 를 사용하는 것은 좋지 않습니다 .
이 경우 LOG_USER
(정상적인 프로그램 인 경우) 또는 LOG_DAEMON
(서버 인 경우) 서버를 사용하여 시작 메시지와 오류 메시지를 syslog
쓰되 모든 로그 메시지를 외부의 파일에 쓰십시오 syslog
. 예를 들어, Apache HTTPd는 /var/log/apache2/*
또는에 로그인하며 /var/log/httpd/*
일반 open
/ fopen
및 write
/ printf
호출을 사용한다고 가정 합니다.
rpm -qa | grep syslog
또는 dpkg -l '*syslog*'
아마 당신에게 말할 것입니다.
sysklogd
syslog 소프트웨어의 유일한 게임 이었을 때의 유물입니다 . 요즘 같은 소프트웨어 syslog-ng
, rsyslog
그리고 dsyslog
존재 단지 서비스 / 수준보다 훨씬 더 정교한 필터링 기능을 가지고있다.
당신은하고 싶은 것 #include <syslog.h>
, 다음 사용 syslog()
활성화 어떤 시스템 로깅 프로그램으로 데이터를 전송하는 기능을.
참고 항목 여기 man 페이지를 .
많은 가능성이 있습니다. 당신의 계획은 무엇입니까? 명령 행에서 로그하기위한 옵션이 필요합니까? logger
( bsdutils에 포함되어 있음 )을 살펴보십시오 . 그냥 입력하십시오 :
usr@srv % logger test
그리고 당신에게 다음과 같은 것을 기록 할 것입니다 /var/log/syslog
:
Apr 25 07:55:15 localhost usr: test
도 참조하십시오 man logger
. 로깅 데몬에 따라 이러한 메시지를 특정 파일로 정렬하거나 우선 순위별로 필터링 할 수 있습니다.
다른 프로그래밍 언어에 대한 솔루션도 있으므로 수행하려는 작업을 알려주십시오. ;-)