로그 파일 만들기

로그 파일 만들기

/var/log/에 일부 데이터를 유지하기 위해 일부 라이브러리 함수나 C 언어 시스템 호출을 사용하여 Linux에서 로그 파일을 생성할 수 있는 방법이 있습니까? 그리고 로그를 작성하고 처리할 때 어떤 기준을 따라야 하는지 알고 싶습니다. 감사해요

답변1

C 프로그램에서 로그하는 표준 방법은 다음과 같습니다.syslog.

먼저 헤더 파일을 포함합니다.

#include <syslog.h>

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

openlog("programname", 0, LOG_USER);

첫 번째 매개변수는 ID 또는 라벨로, 각 메시지 시작 부분에 자동으로 추가됩니다. 여기에 프로그램 이름을 입력하세요.

두 번째 인수는 사용하려는 옵션 또는 0정상적인 동작에 대한 옵션입니다. 전체 옵션 목록은 에 있습니다 man 3 syslog. 유용한 정보 중 하나는 LOG_PIDsyslog가 로그 메시지에 프로세스 ID를 기록하게 한다는 것입니다.

그런 다음 로그 메시지를 쓰고 싶을 때마다 다음을 호출합니다 syslog.

syslog(LOG_INFO, "%s", "Message");

첫 번째 매개변수는 우선순위입니다. 우선순위 범위는 DEBUG(가장 덜 중요함) 부터 EMERG(긴급 상황에만)까지이며 DEBUG, INFO, 및 ERR가 가장 일반적으로 사용됩니다. man 3 syslog옵션을 확인하세요 .

두 번째와 세 번째 매개변수는 printf와 마찬가지로 형식과 메시지입니다.

이것이 나타나는 로그 파일은 시스템 로그 설정에 따라 다릅니다.

기본 설정에서는 아마도 /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기록되지만 기록되지는 않음을 의미합니다.INFONOTICEERRCRITDEBUG


아니면 당신이 가지고 있다면rsyslog, 다음을 시도해 볼 수 있습니다.속성 기반 필터,예를 들어

:syslogtag, isequal, "programname:"    /var/log/programname.log

syslogtag에는 ":"이 포함되어야 합니다.

LOG_LOCAL또는 소프트웨어를 다른 사람에게 배포할 계획이라면 사용법 이나 필터 에 의존하는 것은 좋은 생각이 아닐 수도 있습니다 rsyslog.

이 경우 LOG_USER(일반 프로그램인 경우) 또는 ( LOG_DAEMON서버인 경우) 시작 메시지와 오류 메시지를 작성 해야 일반syslog하지만 모든 로그 메시지는 / 및 / 호출을 사용하여 작성해야 합니다.syslog/var/log/apache2/*/var/log/httpd/*openfopenwriteprintf

답변2

그런 다음 활성 syslog 프로그램에 데이터를 보내려면 #include <syslog.h>이러한 기능을 사용해야 합니다 .syslog()

보다매뉴얼 페이지는 여기에 있습니다.

답변3

많은 가능성이 있는데, 당신의 계획은 무엇인가요? 명령줄에서 로그인하는 옵션만 필요합니까? 살펴보세요 logger(포함됨)bsdutils). 다음을 입력하세요.

usr@srv % logger test

다음과 같은 내용이 기록됩니다 /var/log/syslog.

Apr 25 07:55:15 localhost usr: test

당신은 또한 볼 수 있습니다man logger. 로깅 데몬에 따라 이러한 메시지를 특정 파일로 정렬하거나 우선순위에 따라 필터링할 수 있습니다.

다양한 프로그래밍 언어에 대한 몇 가지 솔루션도 있으므로 원하는 작업을 알려주십시오 ;-)

답변4

프로그램 이름으로 필터링하는 방법은 위에서 언급한 것과 다릅니다. 최신 버전 rsyslog(내 컴퓨터의 버전은 5.8.6)의 경우 다음과 같습니다.

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

자세한 내용은 다음을 확인하세요.여기

관련 정보