Logging: Simple Text File Logging Functions and Macros
From NSIS Wiki
Jump to navigationJump to search
Author: MikeSchinkel (talk, contrib) |
Description
This code provides an simple set of macros for creating a text log. Also, you can examine the log file written by the example code to see what order code is executed by NSIS.
How To Use
The is the example code that uses TextLog.nsh:
# TextLog.nsh # Written by Mike Schinkel [http://www.mikeschinkel.com/blog/] # 12/23/2005 # # 9/15/2006 Added seek to end of file so it's not overwritten on each call # Added LogMsg so file is not locked between writes !include "textlog.nsh" OutFile "test.exe" # This so the log will be written to same dir as the test file. # NOT recommended for actual installation files. InstallDir "$EXEDIR" Page custom OnCustom AfterCustom Page components Page instfiles Page custom ShowLog Function .onInit ${LogSetFileName} "$INSTDIR\MyInstallLog.txt" ${LogSetOn} ${LogText} "In .onInit" FunctionEnd Function OnCustom ${LogText} "In Function OnCustom" FunctionEnd Function AfterCustom ${LogText} "In Function AfterCustom" FunctionEnd Section one ${LogText} "In Section One" SectionEnd Section two ${LogText} "In Section Two" SectionEnd Section three ${LogText} "In Section Three" SectionEnd Function ShowLog ${LogText} "In Function ShowLog" ExecShell "open" "$INSTDIR\MyInstallLog.txt" FunctionEnd Section "-CleanUp" ${LogText} "In Section -CleanUp" ${LogSetOff} SectionEnd
This is the result that gets written to "$INSTDIR\MyInstallLog.txt" when running the previous example:
In .onInit In Function OnCustom In Section One In Section Two In Section Three In Section -CleanUp
And this is the macro file TextLog.nsh:
# TextLog.nsh v1.1 - 2005-12-26 # Written by Mike Schinkel [http://www.mikeschinkel.com/blog/] Var /GLOBAL __TextLog_FileHandle Var /GLOBAL __TextLog_FileName Var /GLOBAL __TextLog_State !define LogMsg '!insertmacro LogMsgCall' !macro LogMsgCall _text Call LogSetOn Push "${_text}" Call LogText Call LogSetOff !macroend !define LogText '!insertmacro LogTextCall' !macro LogTextCall _text Push "${_text}" Call LogText !macroend Function LogText Exch $0 ; pABC -> 0ABC FileWrite $__TextLog_FileHandle "$0$\r$\n" Pop $0 ; 0ABC -> ABC FunctionEnd !define LogSetFileName '!insertmacro LogSetFileNameCall' !macro LogSetFileNameCall _filename Push "${_filename}" Call LogSetFileName !macroend Function LogSetFileName Exch $0 ; pABC -> 0ABC StrCpy $__TextLog_FileName "$0" StrCmp $__TextLog_State "open" +1 +3 Call LogSetOff Call LogSetOn Pop $0 ; 0ABC -> ABC FunctionEnd !define LogSetOn '!insertmacro LogSetOnCall' !macro LogSetOnCall Call LogSetOn !macroend Function LogSetOn StrCmp $__TextLog_FileName "" +1 AlreadySet StrCpy $__TextLog_FileName "$INSTDIR\install.log" AlreadySet: StrCmp $__TextLog_State "open" +2 FileOpen $__TextLog_FileHandle "$__TextLog_FileName" a FileSeek $__TextLog_FileHandle 0 END StrCpy $__TextLog_State "open" FunctionEnd !define LogSetOff '!insertmacro LogSetOffCall' !macro LogSetOffCall Call LogSetOff !macroend Function LogSetOff StrCmp $__TextLog_State "open" +1 +2 FileClose $__TextLog_FileHandle StrCpy $__TextLog_State "" FunctionEnd
Written by MikeSchinkel.