이벤트를 기준으로 로그 파일에 쓰기

LogFileEventConsumer 클래스는 지정된 이벤트가 발생할 때 미리 정의된 텍스트를 로그 파일에 쓸 수 있습니다. 이 클래스는 WMI에서 제공하는 표준 이벤트 소비자입니다.

표준 소비자를 사용하기 위한 기본 프로시저는 항상 동일하며 표준 소비자를 사용하여 이벤트 모니터링 및 응답에서 확인할 수 있습니다.

다음 프로시저는 기본 프로시저에 추가되고 LogFileEventConsumer 클래스에만 적용되며 프로그램을 실행하는 이벤트 소비자를 만드는 방법을 설명합니다.

로그 파일에 쓰는 이벤트 소비자를 만들려면

  1. MOF(Managed Object Format) 파일에서 LogFileEventConsumer 인스턴스를 만들어 쿼리에서 요청하는 이벤트를 수신하고, Name 속성에서 인스턴스 이름을 지정한 다음, 로그 파일의 경로를 Filename 속성에 배치합니다.

    자세한 내용은 MOF(Managed Object Format) 클래스 디자인을 참조하세요.

  2. Text 속성의 로그 파일에 쓸 텍스트 템플릿을 제공합니다.

    자세한 내용은 표준 문자열 템플릿 사용을 참조하세요.

  3. __EventFilter 인스턴스를 만들고 소비자를 활성화할 이벤트를 지정하는 쿼리를 정의합니다.

    자세한 내용은 WQL을 사용하여 쿼리를 참조하세요.

  4. __FilterToConsumerBinding 인스턴스를 만들어 필터를 LogFileEventConsumer 인스턴스와 연결합니다.

  5. 로그 파일을 읽거나 로그 파일에 쓰는 사용자를 제어하려면 로그가 있는 디렉터리의 보안을 필요한 수준으로 설정합니다.

  6. Mofcomp.exe를 사용하여 MOF 파일을 컴파일합니다.

이 섹션의 예제는 MOF 코드에 있지만 WMI용 스크립팅 API 또는 WMI용 COM API를 사용하여 프로그래밍 방식으로 인스턴스를 만들 수 있습니다. 이 예제에서는 표준 LogFileEventConsumer를 사용하여 LogFileEvent 클래스의 인스턴스를 만들 때 파일 c:\Logfile.log에 줄을 쓰는 LogFileEvent라는 소비자 클래스를 만듭니다.

다음 절차에서는 예제를 사용하는 방법을 설명합니다.

예제를 사용하려면

  1. 아래 나열된 MOF 목록을 텍스트 파일에 복사하고 .mof 확장명으로 저장합니다.

  2. 명령 창에서 다음 명령을 사용하여 MOF 파일을 컴파일합니다.

    Mofcompfilename**.mof**

  3. Logfile.log를 열어 LogFileEvent.Name으로 지정된 줄 "Logfile 이벤트 소비자 이벤트"를 확인합니다.

// Set the namespace as root\subscription.
// The LogFileEventConsumer is already compiled 
//     in the root\subscription namespace. 

#pragma namespace ("\\\\.\\Root\\subscription")

class LogFileEvent
{
    [key]string Name;
};

// Create an instance of the standard log
// file consumer and give it the alias $CONSUMER

instance of LogFileEventConsumer as $CONSUMER
{
    // If the file does not already exist, it is created.
    Filename = "c:\\Logfile.log";  
    IsUnicode = FALSE;
    // Name of this instance of LogFileEventConsumer
    Name = "LogfileEventConsumer_Example";  
    // See "Using Standard String Templates"; 
    Text = "%TargetInstance.Name%"; 
    // TargetInstance is the instance of LogFileEvent 
    //    requested in the filter        
                                         
};

// Create an instance of the event filter 
// and give it the alias $FILTER
// Query for any instance operation type,
// such as instance creation, for LogFileEvent class

instance of __EventFilter as $FILTER
{
    Name = "LogFileFilter";
    Query = "SELECT * FROM __InstanceOperationEvent "
        "WHERE TargetInstance.__class = \"LogFileEvent\"";
    QueryLanguage = "WQL";
};

// Create an instance of the binding.

instance of __FilterToConsumerBinding
{
    Consumer=$CONSUMER;
    Filter=$FILTER;
 DeliverSynchronously=FALSE;
};

// Create an instance of this class right now
// Look at the file c:\Logfile.log to see
// that a line has been written.

instance of LogFileEvent
{
 Name = "Logfile Event Consumer event";  
};

표준 소비자를 사용하여 이벤트 모니터링 및 응답