'*** v9.5 *** www.dieseyer.de ******************************** ' ' Datei: logdatei.vbs ' Autor: dieseyer@gmx.de ' Auf: www.dieseyer.de ' ' Prozeduren, um LOG-Dateien zu erstellen / fortzuschreiben: ' ' trace32.exe stammt aus ' http://support.microsoft.com/kb/272436 ' http://www.microsoft.com/technet/sms/20/downloads/tools/sp2_tools_help.mspx ' zeigt sehr lange LOG-Einträge (einer Zeile) in einem ' (Status-) Fenster und in der Statuszeile die Dauer vom ' Start der LOG-Datei bis zur aktuellen LOG-Zeile. ' ' Sub LogTrace32( LogTxt ) ' Durch Filter wird aus LogTxt ein errType generiert. ' Ist LogTxt leer ( "" ), wird eine enue LOG-Datei erstellt ' ' Sub LogEintrag( LogTxt ) ' LOG-Dateien für baretail.exe ' Ist LogTxt leer ( "" ), wird eine neue LOG-Datei erstellt ' (http://baremetalsoft.com/baretail) ' ' Sub LogText( LogTxt ) ' ein Einzeiler ' ' ' Die Zeilennummerm (z.B. "029 :: " für LOG-Dateien können ' in VBS-Dateien komfortabel mit ' http://dieseyer.de/scr-html/sendenan-sicherung.html ' angepasst werden. ' '************************************************************ Option Explicit ' Siehe http://dieseyer.de/dse-wsh-lernen.html#OptionExpl Dim SleepDauer LogText "040 :: " & now() & " - Aufruf der Sub-Prozedur ""LogText"" " Dim LogDatei : LogDatei = "c:\log.log" LogEintrag "043 :: Aufruf der Sub-Prozedur ""LogEintrag"" " LogDatei = "" ' Dadurch wird innerhalb von LogTrace32() die (Ziel-) LogDatei festgelegt LogTrace32 "047 :: " & WScript.ScriptFullName & " wurde soeben gestartet" LogTrace32 "048 :: Aufruf der Sub-Prozedur ""LogTrace32"" " LogTrace32 "049 :: Aufruf faiLED der "" " LogTrace32 "050 :: Aufruf discarded der "" " LogTrace32 "051 :: Aufruf ERROR der "" " LogTrace32 "052 :: Aufruf FEhler der "" " LogTrace32 "053 :: Aufruf Warning der "" " SleepDauer = 11 LogTrace32 "055 :: Neue LOG-Datei nach " & SleepDauer & "s, weil Parameter für ""Sub LogTrace32( """" )"" (also leer) ist." ' neue LOG-Datei mit erste Zeile als normale Zeile WScript.Sleep SleepDauer * 1000 LogTrace32 "" LogTrace32 "058 :: Aufruf faiLED der "" " LogTrace32 "059 :: Aufruf discarded der "" " LogTrace32 "060 :: Aufruf ERROR der "" " LogTrace32 "061 :: Aufruf FEhler der "" " LogTrace32 "062 :: Aufruf Warning der "" " LogTrace32 "063 :: Aufruf Achtung der Sub-Prozedur ""LogTrace32"" " LogTrace32 "064 :: Aufruf !not exist! der "" " LogTrace32 "065 :: Aufruf !Fehlt! der "" " LogTrace32 "066 :: Aufruf !Fehlt: der Sub-Prozedur! ""LogTrace32"" " LogTrace32 "067 :: Aufruf !existiert nicht! der "" " LogTrace32 "068 :: Aufruf !nicht gefunden! der "" " LogTrace32 "069 :: Aufruf !unable der Sub-Prozedur ""LogTrace32"" " LogTrace32 "070 :: Aufr Could not get "" " LogTrace32 "071 :: Aufr Could not specified Prozedur ""LogTrace32"" " WScript.Quit '*** v8.4 *** www.dieseyer.de ******************************** Sub LogTrace32( LogTxt ) '************************************************************ ' Aufbau einer LOG-Datei für trace32.exe ( SMS Trace; ' ALLES in einer Zeile!): ' ' < ' time="04:00:54.309+-60" ' date="03-14-2008" ' component="SrcUpdateMgr" ' context="" ' type="0" ' thread="1812" ' file="productpackage.cpp:97" ' > ' ' "context=" Info wird nicht angezeigt ' type="0" normale Zeie ' type="1" normale Zeie ' type="2" gelbe Zeie ' type="3" rote Zeie ' type="F" rote Zeie ' "thread=" kann eine Dezimalzahl aufnehmen; trace32 zeigt ' neben der Dezimalzahl in Klammern die entspr. ' Hexadezimalzahl an - z.B. "33 (0x21)" ' "file=" wird in "Source:" angezeigt ' Dim fso : Set fso = WScript.CreateObject("Scripting.FileSystemObject") Dim FileOut, LogDateiX, ErrType, Tst, Nr On Error Resume Next LogDateiX = LogDatei ' wurde die Variable LogDatei nicht außerhalb der Prozedur definiert If Err.Number <> 0 Then LogDateiX = WScript.ScriptFullName & "-trc32.log" On Error Goto 0 If Len( LogDateiX ) < 2 Then LogDateiX = WScript.ScriptFullName & "-trc32.log" If LogTxt = "" Then ' eine neue .LOG-Datei wird erstellt, eine vorhandene überschrieben fso.OpenTextFile( LogDateiX, 2, true).Close Exit Sub End If Tst = UCase( Logtxt ) : ErrType = 1 If InStr( Tst, "FAILED" ) Then ErrType = 3 If InStr( Tst, "ERROR" ) Then ErrType = 3 If InStr( Tst, "FEHLER" ) Then ErrType = 3 If InStr( Tst, "MISSING" ) Then ErrType = 2 If InStr( Tst, "FEHLT:" ) Then ErrType = 2 If InStr( Tst, "EXISTIERT NICHT" ) Then ErrType = 2 If InStr( Tst, "WARNING" ) Then ErrType = 2 If InStr( Tst, "ACHTUNG" ) Then ErrType = 2 If InStr( Tst, "DISCARDED" ) Then ErrType = 2 If InStr( Tst, "NOT EXIST" ) Then ErrType = 2 If InStr( Tst, "NICHT GEFUNDEN" ) Then ErrType = 2 If InStr( Tst, "NOT SPECIFIED" ) Then ErrType = 2 If InStr( Tst, "UNDEFINED" ) Then ErrType = 2 If InStr( Tst, "NICHT DEFINIERT" ) Then ErrType = 2 If InStr( Tst, "UNDEFINIERT" ) Then ErrType = 2 If InStr( Tst, "UNABLE" ) Then ErrType = 2 If InStr( Tst, "NOT GET" ) Then ErrType = 2 Dim objTimeZone, colTimeZone, TimeZoneBias Set colTimeZone = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_TimeZone") For Each objTimeZone in colTimeZone TimeZoneBias = objTimeZone.Bias Next Nr = 0 ' Wenn in Thread die Zeilennummer stehen soll: Nr = 999999 If Nr = 0 AND InStr( LogTxt, " :" & ": " ) > 0 Then Nr = LogTxt Nr = Mid( Nr, 1, InStrRev( Nr, " :" & ": " ) -1 ) ' nach der Zeilennummer Nr = Mid( Nr, InStrRev( Nr, " " ) + 1 ) ' vor der Zeilennummer On Error Resume Next : Tst = Int( Nr ) : On Error Goto 0 ' Zeilennummer als (Integer) Zahl Do ' Tst für Vergleich auf gleiche Länge wie Nr anpassen If Len( Tst ) = Len( Nr ) Then Exit Do Tst = "0" & Tst Loop If "x" & Tst = "x" & Nr Then LogTxt = Replace( LogTxt, Tst & " :" & ": ", "" ) Nr = Int( Nr ) End If End If If Nr = 999999 Then Nr = 0 Tst = Timer() If InStr( Tst, "," ) = 0 Then Tst = "111,00" If InStr( Tst, "," ) > 0 Then Tst = Mid( Tst, InStr( Tst, "," ), 4 ) Tst = Replace( Tst, "," , ".") If Len( Tst ) < 3 Then Tst = Tst & "0" LogTxt = "" LogTxt = LogTxt & "<" LogTxt = LogTxt & "time=""" & Time() & Tst & "+-" & TimeZoneBias & """ " LogTxt = LogTxt & "date=""" & Month( Date() ) & "-" & Day( Date() ) & "-" & Year( Date() ) & """ " LogTxt = LogTxt & "component=""" & WScript.ScriptName & """ " LogTxt = LogTxt & "context="""" " LogTxt = LogTxt & "type=""" & ErrType & """ " LogTxt = LogTxt & "thread=""" & Nr & """ " LogTxt = LogTxt & "file=""dieseyer.de"" " LogTxt = LogTxt & ">" fso.OpenTextFile( LogDateiX, 8, true).WriteLine ( LogTxt ) End Sub ' LogTrace32( LogTxt ) '*** v8.3 *** www.dieseyer.de ******************************** Sub LogEintrag( LogTxt ) '************************************************************ Dim fso : Set fso = WScript.CreateObject("Scripting.FileSystemObject") Dim FileOut Dim LogDateiX On Error Resume Next LogDateiX = LogDatei ' wurde die Variable LogDatei nicht außerhalb der Prozedur definiert If Err.Number <> 0 Then LogDateiX = WScript.ScriptFullName & ".log" On Error Goto 0 If Len( LogDateiX ) < 2 Then LogDateiX = WScript.ScriptFullName & ".log" If LogTxt = "" Then ' eine neue .LOG-Datei wird erstellt, eine vorhandene überschrieben Set FileOut = fso.OpenTextFile( LogDateiX, 2, true) FileOut.Close Set FileOut = Nothing Set fso = Nothing Exit Sub End If Set FileOut = fso.OpenTextFile( LogDateiX, 8, true) If LogTxt = vbCRLF Then FileOut.WriteLine ( LogTxt ) ' If not LogTxt = vbCRLF Then FileOut.WriteLine ( Now() & vbTab & LogTxt ) ' If not LogTxt = vbCRLF Then FileOut.WriteLine ( Timer() & " " & LogTxt ) If not LogTxt = vbCRLF Then FileOut.WriteLine ( Now() & " " & LogTxt ) FileOut.Close Set FileOut = Nothing Set fso = Nothing End Sub ' LogEintrag( LogTxt ) '*** v9.C *** www.dieseyer.de ******************************* Sub Trace32Log( LogTxt, ErrType ) '*********************************************************** ' in VBS und HTA verwendbar ' Aufbau einer LOG-Datei für trace32.exe ( SMS Trace; ' ALLES in einer Zeile!): ' ' < ' time="08:12:54.309+-60" ' date="03-14-2008" ' component="SrcUpdateMgr" ' context="" ' type="0" ' thread="1812" ' file="productpackage.cpp:97" ' > ' ' "context=" Info wird nicht angezeigt ' type="0" normale Zeie => NEUE LOG-DATEI - ggf. alte überschreiben !!!!!!!!!!!! ' type="1" normale Zeie ' type="2" gelbe Zeie ' type="3" rote Zeie ' type="F" rote Zeie ' "thread=" kann eine Dezimalzahl aufnehmen; trace32 zeigt ' neben der Dezimalzahl in Klammern die entspr. ' Hexadezimalzahl an - z.B. "33 (0x21)" ' "file=" wird in "Source:" angezeigt ' Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") Dim LogDateiX, TitelX, Tst, Nr On Error Resume Next Tst = KeineLog On Error Goto 0 If UCase( Tst ) = "JA" Then Exit Sub On Error Resume Next TitelX = Titel ' Fehler, wenn die Variable 'Titel' nicht außerhalb der Prozedur definiert wurde TitelX = title ' Fehler, wenn die Variable 'Titel' nicht außerhalb der Prozedur definiert wurde If Len( TitelX ) < 2 Then TitelX = document.title ' .hta If Len( TitelX ) < 2 Then TitelX = WScript.ScriptName ' .vbs On Error Goto 0 On Error Resume Next LogDateiX = LogDatei ' wurde die Variable 'LogDatei' nicht außerhalb der Prozedur definiert If Len( LogDateiX ) < 2 Then LogDateiX = WScript.ScriptFullName & ".log" ' .vbs If Len( LogDateiX ) < 2 Then LogDateiX = TitelX & ".log" ' .hta On Error Goto 0 Nr = 0 ' Wenn in Thread die Zeilennummer stehen soll: Nr = 999999 If Nr = 0 AND InStr( LogTxt, " :" & ": " ) > 0 Then ' Wenn in Thread die Zeilennummer stehen soll - Voraussetzung ' ist eine ZeilenNr. im Format '22 :: ' Nr = LogTxt Nr = Mid( Nr, 1, InStrRev( Nr, " :" & ": " ) -1 ) ' nach der Zeilennummer Nr = Mid( Nr, InStrRev( Nr, " " ) + 1 ) ' vor der Zeilennummer On Error Resume Next : Tst = Int( Nr ) : On Error Goto 0 ' Zeilennummer als (Integer) Zahl Do ' Tst für Vergleich auf gleiche Länge wie Nr anpassen If Len( Tst ) = Len( Nr ) Then Exit Do Tst = "0" & Tst Loop If "x" & Tst = "x" & Nr Then LogTxt = Replace( LogTxt, Tst & " :" & ": ", "" ) Nr = Int( Nr ) End If End If If Nr = 999999 Then Nr = 0 ' Zwei Nachkommastellen (nach Sekunden) der aktuellen Zeit ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tst = Timer() ' timer() in USA: 1234.22 Tst = Replace( Tst, "," , ".") ' timer() in Deutschland: 123454,12 If InStr( Tst, "." ) = 0 Then Tst = Tst & ".000" Tst = Mid( Tst, InStr( Tst, "." ), 4 ) If Len( Tst ) < 3 Then Tst = Tst & "0" ' Zeitzone ermitteln - neu (v9.C) und immer richtig(er) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dim AktDMTF : Set AktDMTF = CreateObject("WbemScripting.SWbemDateTime") AktDMTF.SetVarDate Now(), True : Tst = Tst & Mid( AktDMTF, 22 ) ' : MsgBox Tst, , "205 :: " ' MsgBox "AktDMTF: '" & AktDMTF & "'", , "206 :: " Set AktDMTF = nothing LogTxt = "" LogTxt = LogTxt & "<" LogTxt = LogTxt & "time=""" & Hour( Time() ) & ":" & Minute( Time() ) & ":" & Second( Time() ) & Tst & """ " LogTxt = LogTxt & "date=""" & Month( Date() ) & "-" & Day( Date() ) & "-" & Year( Date() ) & """ " LogTxt = LogTxt & "component=""" & TitelX & """ " LogTxt = LogTxt & "context="""" " LogTxt = LogTxt & "type=""" & ErrType & """ " LogTxt = LogTxt & "thread=""" & Nr & """ " LogTxt = LogTxt & "file=""dieseyer.de"" " LogTxt = LogTxt & ">" Tst = 8 ' LOG-Datei erweitern If ErrType = 0 Then Tst = 2 ' LOG-Datei erneuern (alte löschen, neue erstellen) On Error Resume Next If LogTxt = vbCRLF Then fso.OpenTextFile( LogDateiX, Tst, true).WriteLine ( LogTxt ) If not LogTxt = vbCRLF Then fso.OpenTextFile( LogDateiX, Tst, true).WriteLine ( LogTxt ) On Error Goto 0 Set fso = Nothing End Sub ' Trace32Log( LogTxt, ErrType ) '*** v3.9 *** www.dieseyer.de ******************************** Sub LogText( LogTxt ) '************************************************************ WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile( WScript.ScriptFullName & ".log", 8, true ).WriteLine ( LogTxt ) End Sub ' LogText( LogTxt )