로그 파일을 만들다 된 라이브러리 함수

리눅스에서 c 언어로 된 라이브러리 함수 또는 시스템 호출의 도움으로 / var / log /에 일부 데이터를 유지하기 위해 로그 파일을 만드는 방법이 있습니까? 또한 로그를 작성하고 처리하기 위해 따라야하는 표준을 알고 싶습니다. 감사



답변

C 프로그램에서 로그하는 표준 방법은 syslog입니다.

헤더 파일을 포함시켜 시작하십시오.

#include <syslog.h>

그런 다음 프로그램 초기에 다음을 호출하여 syslog를 구성해야합니다 openlog.

openlog("programname", 0, LOG_USER);

첫 번째 인수는 식별 또는 태그이며, 각 메시지 시작시 자동으로 추가됩니다. 여기에 프로그램 이름을 입력하십시오.

두 번째 인수는 사용하려는 옵션 또는 0정상적인 동작입니다. 전체 옵션 목록은에 있습니다 man 3 syslog. 유용하다고 생각되는 것은 LOG_PIDsyslog가 프로세스 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

syslogtag는 “:”을 포함해야합니다.

또는 소프트웨어를 다른 사람에게 배포하려는 경우 LOG_LOCAL또는 rsyslog필터 를 사용하는 것은 좋지 않습니다 .

이 경우 LOG_USER(정상적인 프로그램 인 경우) 또는 LOG_DAEMON(서버 인 경우) 서버를 사용하여 시작 메시지와 오류 메시지를 syslog쓰되 모든 로그 메시지를 외부의 파일에 쓰십시오 syslog. 예를 들어, Apache HTTPd는 /var/log/apache2/*또는에 로그인하며 /var/log/httpd/*일반 open/ fopenwrite/ printf호출을 사용한다고 가정 합니다.


답변

당신은하고 싶은 것 #include <syslog.h>, 다음 사용 syslog()활성화 어떤 시스템 로깅 프로그램으로 데이터를 전송하는 기능을.

참고 항목 여기 man 페이지를 .


답변

많은 가능성이 있습니다. 당신의 계획은 무엇입니까? 명령 행에서 로그하기위한 옵션이 필요합니까? logger( bsdutils에 포함되어 있음 )을 살펴보십시오 . 그냥 입력하십시오 :

usr@srv % logger test

그리고 당신에게 다음과 같은 것을 기록 할 것입니다 /var/log/syslog:

Apr 25 07:55:15 localhost usr: test

도 참조하십시오 man logger. 로깅 데몬에 따라 이러한 메시지를 특정 파일로 정렬하거나 우선 순위별로 필터링 할 수 있습니다.

다른 프로그래밍 언어에 대한 솔루션도 있으므로 수행하려는 작업을 알려주십시오. 😉


답변

프로그램 이름으로 필터링은 rsyslog아래에 표시된 것처럼 최신 버전 (내 컴퓨터의 버전은 5.8.6입니다)에 대해 위에서 언급 한 것과 다르게 작성 됩니다.

if $programname == 'popa3d' then /var/log/popa3d.log

자세한 내용은 여기 를 참조 하십시오