2015-02-17 59 views
1

我們正在嘗試爲我們在Windows Server 2008 R2上運行的打印機執行一些內部打印審覈。通過事件查看器中啓用日誌後:如何以編程方式或定期清除Operational PrintService事件日誌?

應用程序和服務日誌 - >微軟 - >窗口 - >的PrintService - >運算

我成功地通過定製抓住與ID 307事件根據我的需要回答this question,然後將這些事件存儲在數據庫中供其他應用程序使用。

 // Build formatted query string 
     string eventID = "307"; 
     string logSource = "Microsoft-Windows-PrintService/Operational"; 
     string sQuery = String.Format("*[System/EventID={0}]", eventID); 

     // Define query and reader 
     var elQuery = new EventLogQuery(logSource, PathType.LogName, sQuery); 
     var elReader = new System.Diagnostics.Eventing.Reader.EventLogReader(elQuery); 

     // List for holding events 
     List<EventRecord> eventList = new List<EventRecord>(); 
     for (EventRecord eventInstance = elReader.ReadEvent(); 
      null != eventInstance; eventInstance = elReader.ReadEvent()) 
     { 
      eventList.Add(eventInstance); 
     } 

我現在無法做的是清楚保存這些事件後的日誌。

這使我可以手動清除該日誌從事件查看器,但運行:

public static void PrintLogs() 
    { 
     foreach (var eventLog in EventLog.GetEventLogs()) 
     { 
      Console.WriteLine(eventLog.Log.ToString()); 
     } 
    } 

只輸出下的「應用程序和服務日誌」中列出的更高級別的日誌:

Application 
HardwareEvents 
Internet Explorer 
Key Management Service 
OAlerts      // Not sure where OAlerts and 
PreEmptive     // PreEmptive are in the Event Viewer 
Security 
System 
Windows PowerShell 

的回答this question提示您不能使用EventLog類訪問Microsoft-Windows- *事件日誌。

有什麼我可以做的,以編程方式清除這個特定的事件日誌(不只是307個事件,但也在操作日誌中的其他人)?

我想設置這個小程序自動運行幾分鐘,幾小時或幾天,但現在它會檢查數據庫中的現有事件,並添加少量新的最後一次運行。

回答

0

我無法弄清楚如何使用現有的類來處理事件日誌,但從應用程序調用wevtutil似乎正在工作。

static void Main(string[] args){   
    const string logSource = "Microsoft-Windows-PrintService/Operational"; 

    /* store print jobs */ 

    ClearLog(logSource); 
} 

public static void ClearLog(string logName) 
    {    
     var psi = new ProcessStartInfo(
      "wevtutil.exe", 
      String.Format("cl {0}", logName)); 
     psi.Verb = "runas"; // Run as administrator 

     using (var p = new Process()) 
     { 
      p.StartInfo = psi;     
      p.Start();    
     } 
    } 

我將它設置爲每小時使用我們的打印服務器上的任務計劃程序運行,並且它暫時工作。由於它設置爲以最高級別運行,因此我不知道是否需要「runas」,但要清除日誌,該進程確實需要管理權限。

我意識到這有錯過的東西的潛力,如果新工作的查詢之間的撞擊和清除日誌,但我們只有大約30打印機,如果有任何我們我們沒有使用這些數字對於任何超過看到可以由於使用率低而移除。

相關問題