2009-03-05 35 views
0

我正在維護一箇舊的asp經典應用程序。 它使用Response.AppendToLog作爲其唯一的調試日誌記錄系統。 我只在我的本地主機上調試它,因此日誌文件位於%SystemDrive%\ inetpub \ logs \ LogFiles文件夾中的硬盤中。如何從IIS日誌中讀取調試信息

我正在尋找一個類似於尾巴的程序來顯示這些調試信息。 也許可能會根據過濾器爲消息着色。

更新:我已經開始在Python中使用Recipe 157035中的信息編寫我自己的尾部程序。日誌記錄大約滯後一分鐘。任何改進它的想法?

回答

0

我完成了。現在我所要做的就是Response.AppendToLog("#message");,其中消息中的每個空格或怪異字符都被下劃線替換。太糟糕了,它遲了一分鐘左右,但總比沒有好。

import time, os, re 

def tail_f(file): 
    interval = 1.0 

    while True: 
     where = file.tell() 
     line = file.readline() 
     if not line: 
      time.sleep(interval) 
      file.seek(where) 
     else: 
      yield line 

def run(): 
    #Set the filename and open the file 
    filename = r"C:\inetpub\logs\LogFiles\W3SVC1\u_ex{0}.log".format(time.strftime("%y%m%d")) 
    file = open(filename,'r') 

    #Find the size of the file and move to the end 
    st_results = os.stat(filename) 
    st_size = st_results[6] 
    file.seek(st_size) 

    for line in tail_f(file): 
     #ignore comments 
     if line[0] != "#": 
      line = line.strip() 
      parts = line.split(" ") 

      status = parts[10] 
      if status == "304": 
       continue 

      when = parts[1] 
      method = parts[3] 
      path = parts[4] 
      query = parts[5].split("|")[0].split("#")[0] 

      if query == "-": 
       query = "" 
      elif query != "": 
       query = "?"+query 

      print when, method[0], status, path + query 

      if status == "500": 
       if parts[5].find("|") != -1: 
        errorparts = parts[5].replace("_", " ").split("|")[1:] 
        linenr = errorparts[0] 
        errornr = errorparts[1] 
        errormessage = errorparts[2] 
        print "Error {0} on line {1}\n{2}".format(errornr, linenr, errormessage) 
      if parts[5].find("#") != -1: 
       print "* "+("\n* ".join(parts[5].replace("_", " ").split("#")[1:])) 

run() 
0

爲什麼要重新發明輪子?您可以使用Snare for IIS(免費)將信息記錄到Kiwi's Syslog Daemon(不免費)。

+0

我試過了網羅和epilog,但都沒有像我想要的那麼容易使用。我似乎無法讓他們向我展示我的日誌。 – 2009-03-05 16:39:50