<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nsis.sourceforge.io/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MikeSchinkel</id>
	<title>NSIS Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://nsis.sourceforge.io/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MikeSchinkel"/>
	<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/Special:Contributions/MikeSchinkel"/>
	<updated>2026-04-05T16:43:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8893</id>
		<title>Logging: Simple Text File Logging Functions and Macros</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8893"/>
		<updated>2005-12-26T05:17:38Z</updated>

		<summary type="html">&lt;p&gt;MikeSchinkel: Fixed omission in MyInstallLog.txt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|MikeSchinkel}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== How To Use ==&lt;br /&gt;
The is the example code that uses TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
# 12/23/2005&lt;br /&gt;
&lt;br /&gt;
!include &amp;quot;textlog.nsh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OutFile &amp;quot;test.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This so the log will be written to same dir as the test file. &lt;br /&gt;
# NOT recommended for actual installation files.&lt;br /&gt;
InstallDir &amp;quot;$EXEDIR&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Page custom OnCustom AfterCustom&lt;br /&gt;
Page components&lt;br /&gt;
Page instfiles&lt;br /&gt;
Page custom ShowLog&lt;br /&gt;
&lt;br /&gt;
Function .onInit&lt;br /&gt;
	${LogSetFileName} &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
	${LogSetOn}&lt;br /&gt;
	${LogText} &amp;quot;In .onInit&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function OnCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function OnCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function AfterCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function AfterCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section one&lt;br /&gt;
	${LogText} &amp;quot;In Section One&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section two&lt;br /&gt;
	${LogText} &amp;quot;In Section Two&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section three&lt;br /&gt;
	${LogText} &amp;quot;In Section Three&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Function ShowLog&lt;br /&gt;
	${LogText} &amp;quot;In Function ShowLog&amp;quot;&lt;br /&gt;
	ExecShell &amp;quot;open&amp;quot; &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;-CleanUp&amp;quot;&lt;br /&gt;
	${LogText} &amp;quot;In Section -CleanUp&amp;quot;&lt;br /&gt;
	${LogSetOff}&lt;br /&gt;
SectionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result that gets written to &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot; when running the previous example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
In .onInit&lt;br /&gt;
In Function OnCustom&lt;br /&gt;
In Section One&lt;br /&gt;
In Section Two&lt;br /&gt;
In Section Three&lt;br /&gt;
In Section -CleanUp&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this is the macro file TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh v1.1 - 2005-12-26&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
&lt;br /&gt;
Var /GLOBAL __TextLog_FileHandle&lt;br /&gt;
Var /GLOBAL __TextLog_FileName&lt;br /&gt;
Var /GLOBAL __TextLog_State&lt;br /&gt;
&lt;br /&gt;
!define LogText &#039;!insertmacro LogTextCall&#039;&lt;br /&gt;
!macro LogTextCall _text&lt;br /&gt;
	Push &amp;quot;${_text}&amp;quot;&lt;br /&gt;
	Call LogText&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogText&lt;br /&gt;
	Push $0   	; pABC -&amp;gt; 0pABC&lt;br /&gt;
	Exch      	; 0pABC -&amp;gt; p0ABC&lt;br /&gt;
	Pop $0    	; p0ABC -&amp;gt; 0ABC&lt;br /&gt;
	FileWrite $__TextLog_FileHandle &amp;quot;$0$\r$\n&amp;quot;&lt;br /&gt;
	Pop $0		; 0ABC -&amp;gt; ABC&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!define LogSetFileName &#039;!insertmacro LogSetFileNameCall&#039;&lt;br /&gt;
!macro LogSetFileNameCall _filename&lt;br /&gt;
	Push &amp;quot;${_filename}&amp;quot;&lt;br /&gt;
	Call LogSetFileName&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogSetFileName&lt;br /&gt;
	Push $0   	; pABC -&amp;gt; 0pABC&lt;br /&gt;
	Exch      	; 0pABC -&amp;gt; p0ABC&lt;br /&gt;
	Pop $0    	; p0ABC -&amp;gt; 0ABC&lt;br /&gt;
	StrCpy $__TextLog_FileName &amp;quot;$0&amp;quot;&lt;br /&gt;
	StrCmp $__TextLog_State &amp;quot;open&amp;quot; +1 +3&lt;br /&gt;
	Call LogSetOff&lt;br /&gt;
	Call LogSetOn&lt;br /&gt;
	Pop $0		; 0ABC -&amp;gt; ABC&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!define LogSetOn &#039;!insertmacro LogSetOnCall&#039;&lt;br /&gt;
!macro LogSetOnCall&lt;br /&gt;
	Call LogSetOn&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogSetOn&lt;br /&gt;
	StrCmp $__TextLog_FileName &amp;quot;&amp;quot; +1 AlreadySet&lt;br /&gt;
	StrCpy $__TextLog_FileName &amp;quot;$INSTDIR\install.log&amp;quot;&lt;br /&gt;
AlreadySet:&lt;br /&gt;
	StrCmp $__TextLog_State &amp;quot;open&amp;quot; +2&lt;br /&gt;
	FileOpen $__TextLog_FileHandle  &amp;quot;$__TextLog_FileName&amp;quot;  a&lt;br /&gt;
	StrCpy $__TextLog_State &amp;quot;open&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!define LogSetOff &#039;!insertmacro LogSetOffCall&#039;&lt;br /&gt;
!macro LogSetOffCall&lt;br /&gt;
 	Call LogSetOff&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogSetOff&lt;br /&gt;
	StrCmp $__TextLog_State &amp;quot;open&amp;quot; +1 +2&lt;br /&gt;
	FileClose $__TextLog_FileHandle&lt;br /&gt;
	StrCpy $__TextLog_State &amp;quot;&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Written by [[user:MikeSchinkel|MikeSchinkel]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Logging Functions]]&lt;/div&gt;</summary>
		<author><name>MikeSchinkel</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Macro&amp;diff=8892</id>
		<title>Logging: Simple Text File Logging Macro</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Macro&amp;diff=8892"/>
		<updated>2005-12-26T05:07:20Z</updated>

		<summary type="html">&lt;p&gt;MikeSchinkel: Logging: Simple Text File Logging Macro moved to Logging: Simple Text File Logging Functions and Macros&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Logging: Simple Text File Logging Functions and Macros]]&lt;/div&gt;</summary>
		<author><name>MikeSchinkel</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8891</id>
		<title>Logging: Simple Text File Logging Functions and Macros</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8891"/>
		<updated>2005-12-26T05:07:20Z</updated>

		<summary type="html">&lt;p&gt;MikeSchinkel: Logging: Simple Text File Logging Macro moved to Logging: Simple Text File Logging Functions and Macros&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|MikeSchinkel}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== How To Use ==&lt;br /&gt;
The is the example code that uses TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
# 12/23/2005&lt;br /&gt;
&lt;br /&gt;
!include &amp;quot;textlog.nsh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OutFile &amp;quot;test.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This so the log will be written to same dir as the test file. &lt;br /&gt;
# NOT recommended for actual installation files.&lt;br /&gt;
InstallDir &amp;quot;$EXEDIR&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Page custom OnCustom AfterCustom&lt;br /&gt;
Page components&lt;br /&gt;
Page instfiles&lt;br /&gt;
Page custom ShowLog&lt;br /&gt;
&lt;br /&gt;
Function .onInit&lt;br /&gt;
	${LogSetFileName} &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
	${LogSetOn}&lt;br /&gt;
	${LogText} &amp;quot;In .onInit&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function OnCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function OnCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function AfterCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function AfterCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section one&lt;br /&gt;
	${LogText} &amp;quot;In Section One&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section two&lt;br /&gt;
	${LogText} &amp;quot;In Section Two&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section three&lt;br /&gt;
	${LogText} &amp;quot;In Section Three&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Function ShowLog&lt;br /&gt;
	${LogText} &amp;quot;In Function ShowLog&amp;quot;&lt;br /&gt;
	ExecShell &amp;quot;open&amp;quot; &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;-CleanUp&amp;quot;&lt;br /&gt;
	${LogText} &amp;quot;In Section -CleanUp&amp;quot;&lt;br /&gt;
	${LogSetOff}&lt;br /&gt;
SectionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result that gets written to &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot; when running the previous example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
In .onInit&lt;br /&gt;
In Function OnCustom&lt;br /&gt;
In Section One&lt;br /&gt;
In Section Three&lt;br /&gt;
In Section -CleanUp&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this is the macro file TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh v1.1 - 2005-12-26&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
&lt;br /&gt;
Var /GLOBAL __TextLog_FileHandle&lt;br /&gt;
Var /GLOBAL __TextLog_FileName&lt;br /&gt;
Var /GLOBAL __TextLog_State&lt;br /&gt;
&lt;br /&gt;
!define LogText &#039;!insertmacro LogTextCall&#039;&lt;br /&gt;
!macro LogTextCall _text&lt;br /&gt;
	Push &amp;quot;${_text}&amp;quot;&lt;br /&gt;
	Call LogText&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogText&lt;br /&gt;
	Push $0   	; pABC -&amp;gt; 0pABC&lt;br /&gt;
	Exch      	; 0pABC -&amp;gt; p0ABC&lt;br /&gt;
	Pop $0    	; p0ABC -&amp;gt; 0ABC&lt;br /&gt;
	FileWrite $__TextLog_FileHandle &amp;quot;$0$\r$\n&amp;quot;&lt;br /&gt;
	Pop $0		; 0ABC -&amp;gt; ABC&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!define LogSetFileName &#039;!insertmacro LogSetFileNameCall&#039;&lt;br /&gt;
!macro LogSetFileNameCall _filename&lt;br /&gt;
	Push &amp;quot;${_filename}&amp;quot;&lt;br /&gt;
	Call LogSetFileName&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogSetFileName&lt;br /&gt;
	Push $0   	; pABC -&amp;gt; 0pABC&lt;br /&gt;
	Exch      	; 0pABC -&amp;gt; p0ABC&lt;br /&gt;
	Pop $0    	; p0ABC -&amp;gt; 0ABC&lt;br /&gt;
	StrCpy $__TextLog_FileName &amp;quot;$0&amp;quot;&lt;br /&gt;
	StrCmp $__TextLog_State &amp;quot;open&amp;quot; +1 +3&lt;br /&gt;
	Call LogSetOff&lt;br /&gt;
	Call LogSetOn&lt;br /&gt;
	Pop $0		; 0ABC -&amp;gt; ABC&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!define LogSetOn &#039;!insertmacro LogSetOnCall&#039;&lt;br /&gt;
!macro LogSetOnCall&lt;br /&gt;
	Call LogSetOn&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogSetOn&lt;br /&gt;
	StrCmp $__TextLog_FileName &amp;quot;&amp;quot; +1 AlreadySet&lt;br /&gt;
	StrCpy $__TextLog_FileName &amp;quot;$INSTDIR\install.log&amp;quot;&lt;br /&gt;
AlreadySet:&lt;br /&gt;
	StrCmp $__TextLog_State &amp;quot;open&amp;quot; +2&lt;br /&gt;
	FileOpen $__TextLog_FileHandle  &amp;quot;$__TextLog_FileName&amp;quot;  a&lt;br /&gt;
	StrCpy $__TextLog_State &amp;quot;open&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!define LogSetOff &#039;!insertmacro LogSetOffCall&#039;&lt;br /&gt;
!macro LogSetOffCall&lt;br /&gt;
 	Call LogSetOff&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogSetOff&lt;br /&gt;
	StrCmp $__TextLog_State &amp;quot;open&amp;quot; +1 +2&lt;br /&gt;
	FileClose $__TextLog_FileHandle&lt;br /&gt;
	StrCpy $__TextLog_State &amp;quot;&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Written by [[user:MikeSchinkel|MikeSchinkel]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Logging Functions]]&lt;/div&gt;</summary>
		<author><name>MikeSchinkel</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8890</id>
		<title>Logging: Simple Text File Logging Functions and Macros</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8890"/>
		<updated>2005-12-26T05:04:55Z</updated>

		<summary type="html">&lt;p&gt;MikeSchinkel: Rearchitected to fix bug, removed categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|MikeSchinkel}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== How To Use ==&lt;br /&gt;
The is the example code that uses TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
# 12/23/2005&lt;br /&gt;
&lt;br /&gt;
!include &amp;quot;textlog.nsh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OutFile &amp;quot;test.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This so the log will be written to same dir as the test file. &lt;br /&gt;
# NOT recommended for actual installation files.&lt;br /&gt;
InstallDir &amp;quot;$EXEDIR&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Page custom OnCustom AfterCustom&lt;br /&gt;
Page components&lt;br /&gt;
Page instfiles&lt;br /&gt;
Page custom ShowLog&lt;br /&gt;
&lt;br /&gt;
Function .onInit&lt;br /&gt;
	${LogSetFileName} &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
	${LogSetOn}&lt;br /&gt;
	${LogText} &amp;quot;In .onInit&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function OnCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function OnCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function AfterCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function AfterCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section one&lt;br /&gt;
	${LogText} &amp;quot;In Section One&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section two&lt;br /&gt;
	${LogText} &amp;quot;In Section Two&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section three&lt;br /&gt;
	${LogText} &amp;quot;In Section Three&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Function ShowLog&lt;br /&gt;
	${LogText} &amp;quot;In Function ShowLog&amp;quot;&lt;br /&gt;
	ExecShell &amp;quot;open&amp;quot; &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;-CleanUp&amp;quot;&lt;br /&gt;
	${LogText} &amp;quot;In Section -CleanUp&amp;quot;&lt;br /&gt;
	${LogSetOff}&lt;br /&gt;
SectionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result that gets written to &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot; when running the previous example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
In .onInit&lt;br /&gt;
In Function OnCustom&lt;br /&gt;
In Section One&lt;br /&gt;
In Section Three&lt;br /&gt;
In Section -CleanUp&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this is the macro file TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh v1.1 - 2005-12-26&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
&lt;br /&gt;
Var /GLOBAL __TextLog_FileHandle&lt;br /&gt;
Var /GLOBAL __TextLog_FileName&lt;br /&gt;
Var /GLOBAL __TextLog_State&lt;br /&gt;
&lt;br /&gt;
!define LogText &#039;!insertmacro LogTextCall&#039;&lt;br /&gt;
!macro LogTextCall _text&lt;br /&gt;
	Push &amp;quot;${_text}&amp;quot;&lt;br /&gt;
	Call LogText&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogText&lt;br /&gt;
	Push $0   	; pABC -&amp;gt; 0pABC&lt;br /&gt;
	Exch      	; 0pABC -&amp;gt; p0ABC&lt;br /&gt;
	Pop $0    	; p0ABC -&amp;gt; 0ABC&lt;br /&gt;
	FileWrite $__TextLog_FileHandle &amp;quot;$0$\r$\n&amp;quot;&lt;br /&gt;
	Pop $0		; 0ABC -&amp;gt; ABC&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!define LogSetFileName &#039;!insertmacro LogSetFileNameCall&#039;&lt;br /&gt;
!macro LogSetFileNameCall _filename&lt;br /&gt;
	Push &amp;quot;${_filename}&amp;quot;&lt;br /&gt;
	Call LogSetFileName&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogSetFileName&lt;br /&gt;
	Push $0   	; pABC -&amp;gt; 0pABC&lt;br /&gt;
	Exch      	; 0pABC -&amp;gt; p0ABC&lt;br /&gt;
	Pop $0    	; p0ABC -&amp;gt; 0ABC&lt;br /&gt;
	StrCpy $__TextLog_FileName &amp;quot;$0&amp;quot;&lt;br /&gt;
	StrCmp $__TextLog_State &amp;quot;open&amp;quot; +1 +3&lt;br /&gt;
	Call LogSetOff&lt;br /&gt;
	Call LogSetOn&lt;br /&gt;
	Pop $0		; 0ABC -&amp;gt; ABC&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!define LogSetOn &#039;!insertmacro LogSetOnCall&#039;&lt;br /&gt;
!macro LogSetOnCall&lt;br /&gt;
	Call LogSetOn&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogSetOn&lt;br /&gt;
	StrCmp $__TextLog_FileName &amp;quot;&amp;quot; +1 AlreadySet&lt;br /&gt;
	StrCpy $__TextLog_FileName &amp;quot;$INSTDIR\install.log&amp;quot;&lt;br /&gt;
AlreadySet:&lt;br /&gt;
	StrCmp $__TextLog_State &amp;quot;open&amp;quot; +2&lt;br /&gt;
	FileOpen $__TextLog_FileHandle  &amp;quot;$__TextLog_FileName&amp;quot;  a&lt;br /&gt;
	StrCpy $__TextLog_State &amp;quot;open&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!define LogSetOff &#039;!insertmacro LogSetOffCall&#039;&lt;br /&gt;
!macro LogSetOffCall&lt;br /&gt;
 	Call LogSetOff&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function LogSetOff&lt;br /&gt;
	StrCmp $__TextLog_State &amp;quot;open&amp;quot; +1 +2&lt;br /&gt;
	FileClose $__TextLog_FileHandle&lt;br /&gt;
	StrCpy $__TextLog_State &amp;quot;&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Written by [[user:MikeSchinkel|MikeSchinkel]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Logging Functions]]&lt;/div&gt;</summary>
		<author><name>MikeSchinkel</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8874</id>
		<title>Logging: Simple Text File Logging Functions and Macros</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8874"/>
		<updated>2005-12-23T08:18:53Z</updated>

		<summary type="html">&lt;p&gt;MikeSchinkel: Added categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|MikeSchinkel}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== How To Use ==&lt;br /&gt;
The is the example code that uses TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
# 12/23/2005&lt;br /&gt;
&lt;br /&gt;
!include &amp;quot;textlog.nsh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OutFile &amp;quot;test.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This so the log will be written to same dir as the test file. &lt;br /&gt;
# NOT recommended for actual installation files.&lt;br /&gt;
InstallDir &amp;quot;$EXEDIR&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Page custom OnCustom AfterCustom&lt;br /&gt;
Page components&lt;br /&gt;
Page instfiles&lt;br /&gt;
Page custom ShowLog&lt;br /&gt;
&lt;br /&gt;
Function .onInit&lt;br /&gt;
	${LogSetFileName} &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
	${LogSetOn}&lt;br /&gt;
	${LogText} &amp;quot;In .onInit&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function OnCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function OnCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function AfterCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function AfterCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section one&lt;br /&gt;
	${LogText} &amp;quot;In Section One&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section two&lt;br /&gt;
	${LogText} &amp;quot;In Section Two&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section three&lt;br /&gt;
	${LogText} &amp;quot;In Section Three&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Function ShowLog&lt;br /&gt;
	${LogText} &amp;quot;In Function ShowLog&amp;quot;&lt;br /&gt;
	ExecShell &amp;quot;open&amp;quot; &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;-CleanUp&amp;quot;&lt;br /&gt;
	${LogText} &amp;quot;In Section -CleanUp&amp;quot;&lt;br /&gt;
	${LogSetOff}&lt;br /&gt;
SectionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result that gets written to &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot; when running the previous example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
In .onInit&lt;br /&gt;
In Function OnCustom&lt;br /&gt;
In Section One&lt;br /&gt;
In Section Three&lt;br /&gt;
In Section -CleanUp&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this is the macro file TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
# 12/23/2005&lt;br /&gt;
&lt;br /&gt;
Var /GLOBAL __TextLogFileHandle&lt;br /&gt;
Var /GLOBAL __TextLogFileName&lt;br /&gt;
Var /GLOBAL __TextLogState&lt;br /&gt;
&lt;br /&gt;
!define LogText &#039;!insertmacro LOG_TEXT&#039;&lt;br /&gt;
!define LogSetFileName &#039;!insertmacro LOG_SET_FILE_NAME&#039;&lt;br /&gt;
!define LogSetOn &#039;!insertmacro LOG_SET_ON&#039;&lt;br /&gt;
!define LogSetOff &#039;!insertmacro LOG_SET_OFF&#039;&lt;br /&gt;
&lt;br /&gt;
!macro LOG_TEXT TEXT&lt;br /&gt;
	FileWrite $__TextLogFileHandle &amp;quot;${TEXT}$\r$\n&amp;quot;&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
!macro LOG_SET_FILE_NAME filename&lt;br /&gt;
	StrCpy $__TextLogFileName &amp;quot;${filename}&amp;quot;&lt;br /&gt;
	StrCmp $__TextLogState &amp;quot;open&amp;quot; +1 +3&lt;br /&gt;
	!insertmacro LOG_SET_OFF&lt;br /&gt;
 	!insertmacro LOG_SET_ON&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
!macro LOG_SET_ON&lt;br /&gt;
	!define UniqueID ${__LINE__}&lt;br /&gt;
	StrCmp $__TextLogFileName &amp;quot;&amp;quot; +1 AlreadySet_${UniqueID}&lt;br /&gt;
	StrCpy $__TextLogFileName &amp;quot;$INSTDIR\install.log&amp;quot;&lt;br /&gt;
AlreadySet_${UniqueID}:&lt;br /&gt;
	StrCmp $__TextLogState &amp;quot;open&amp;quot; +2&lt;br /&gt;
	FileOpen $__TextLogFileHandle  &amp;quot;$__TextLogFileName&amp;quot;  a&lt;br /&gt;
	StrCpy $__TextLogState &amp;quot;open&amp;quot;&lt;br /&gt;
	!undef UniqueID&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
!macro LOG_SET_OFF&lt;br /&gt;
	StrCmp $__TextLogState &amp;quot;open&amp;quot; +1 +2&lt;br /&gt;
	FileClose $__TextLogFileHandle&lt;br /&gt;
	StrCpy $__TextLogState &amp;quot;&amp;quot;&lt;br /&gt;
!macroend&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Written by [[user:MikeSchinkel|MikeSchinkel]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Code Examples]]&lt;br /&gt;
[[Category:Logging Functions]]&lt;br /&gt;
[[Category:Functions &amp;amp; Macros]]&lt;/div&gt;</summary>
		<author><name>MikeSchinkel</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Macro_For_Simple_Text_File_Log&amp;diff=8873</id>
		<title>Macro For Simple Text File Log</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Macro_For_Simple_Text_File_Log&amp;diff=8873"/>
		<updated>2005-12-23T08:16:45Z</updated>

		<summary type="html">&lt;p&gt;MikeSchinkel: Macro For Simple Text File Log moved to Logging: Simple Text File Logging Macro: To show up in a more appropriate location in Category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Logging: Simple Text File Logging Macro]]&lt;/div&gt;</summary>
		<author><name>MikeSchinkel</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8872</id>
		<title>Logging: Simple Text File Logging Functions and Macros</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8872"/>
		<updated>2005-12-23T08:16:45Z</updated>

		<summary type="html">&lt;p&gt;MikeSchinkel: Macro For Simple Text File Log moved to Logging: Simple Text File Logging Macro&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|MikeSchinkel}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== How To Use ==&lt;br /&gt;
The is the example code that uses TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
# 12/23/2005&lt;br /&gt;
&lt;br /&gt;
!include &amp;quot;textlog.nsh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OutFile &amp;quot;test.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This so the log will be written to same dir as the test file. &lt;br /&gt;
# NOT recommended for actual installation files.&lt;br /&gt;
InstallDir &amp;quot;$EXEDIR&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Page custom OnCustom AfterCustom&lt;br /&gt;
Page components&lt;br /&gt;
Page instfiles&lt;br /&gt;
Page custom ShowLog&lt;br /&gt;
&lt;br /&gt;
Function .onInit&lt;br /&gt;
	${LogSetFileName} &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
	${LogSetOn}&lt;br /&gt;
	${LogText} &amp;quot;In .onInit&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function OnCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function OnCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function AfterCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function AfterCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section one&lt;br /&gt;
	${LogText} &amp;quot;In Section One&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section two&lt;br /&gt;
	${LogText} &amp;quot;In Section Two&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section three&lt;br /&gt;
	${LogText} &amp;quot;In Section Three&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Function ShowLog&lt;br /&gt;
	${LogText} &amp;quot;In Function ShowLog&amp;quot;&lt;br /&gt;
	ExecShell &amp;quot;open&amp;quot; &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;-CleanUp&amp;quot;&lt;br /&gt;
	${LogText} &amp;quot;In Section -CleanUp&amp;quot;&lt;br /&gt;
	${LogSetOff}&lt;br /&gt;
SectionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result that gets written to &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot; when running the previous example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
In .onInit&lt;br /&gt;
In Function OnCustom&lt;br /&gt;
In Section One&lt;br /&gt;
In Section Three&lt;br /&gt;
In Section -CleanUp&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this is the macro file TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
# 12/23/2005&lt;br /&gt;
&lt;br /&gt;
Var /GLOBAL __TextLogFileHandle&lt;br /&gt;
Var /GLOBAL __TextLogFileName&lt;br /&gt;
Var /GLOBAL __TextLogState&lt;br /&gt;
&lt;br /&gt;
!define LogText &#039;!insertmacro LOG_TEXT&#039;&lt;br /&gt;
!define LogSetFileName &#039;!insertmacro LOG_SET_FILE_NAME&#039;&lt;br /&gt;
!define LogSetOn &#039;!insertmacro LOG_SET_ON&#039;&lt;br /&gt;
!define LogSetOff &#039;!insertmacro LOG_SET_OFF&#039;&lt;br /&gt;
&lt;br /&gt;
!macro LOG_TEXT TEXT&lt;br /&gt;
	FileWrite $__TextLogFileHandle &amp;quot;${TEXT}$\r$\n&amp;quot;&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
!macro LOG_SET_FILE_NAME filename&lt;br /&gt;
	StrCpy $__TextLogFileName &amp;quot;${filename}&amp;quot;&lt;br /&gt;
	StrCmp $__TextLogState &amp;quot;open&amp;quot; +1 +3&lt;br /&gt;
	!insertmacro LOG_SET_OFF&lt;br /&gt;
 	!insertmacro LOG_SET_ON&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
!macro LOG_SET_ON&lt;br /&gt;
	!define UniqueID ${__LINE__}&lt;br /&gt;
	StrCmp $__TextLogFileName &amp;quot;&amp;quot; +1 AlreadySet_${UniqueID}&lt;br /&gt;
	StrCpy $__TextLogFileName &amp;quot;$INSTDIR\install.log&amp;quot;&lt;br /&gt;
AlreadySet_${UniqueID}:&lt;br /&gt;
	StrCmp $__TextLogState &amp;quot;open&amp;quot; +2&lt;br /&gt;
	FileOpen $__TextLogFileHandle  &amp;quot;$__TextLogFileName&amp;quot;  a&lt;br /&gt;
	StrCpy $__TextLogState &amp;quot;open&amp;quot;&lt;br /&gt;
	!undef UniqueID&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
!macro LOG_SET_OFF&lt;br /&gt;
	StrCmp $__TextLogState &amp;quot;open&amp;quot; +1 +2&lt;br /&gt;
	FileClose $__TextLogFileHandle&lt;br /&gt;
	StrCpy $__TextLogState &amp;quot;&amp;quot;&lt;br /&gt;
!macroend&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Written by [[user:MikeSchinkel|MikeSchinkel]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Code Examples]]&lt;/div&gt;</summary>
		<author><name>MikeSchinkel</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8871</id>
		<title>Logging: Simple Text File Logging Functions and Macros</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Logging:_Simple_Text_File_Logging_Functions_and_Macros&amp;diff=8871"/>
		<updated>2005-12-23T08:15:17Z</updated>

		<summary type="html">&lt;p&gt;MikeSchinkel: Initial Version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|MikeSchinkel}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== How To Use ==&lt;br /&gt;
The is the example code that uses TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
# 12/23/2005&lt;br /&gt;
&lt;br /&gt;
!include &amp;quot;textlog.nsh&amp;quot;&lt;br /&gt;
&lt;br /&gt;
OutFile &amp;quot;test.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This so the log will be written to same dir as the test file. &lt;br /&gt;
# NOT recommended for actual installation files.&lt;br /&gt;
InstallDir &amp;quot;$EXEDIR&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Page custom OnCustom AfterCustom&lt;br /&gt;
Page components&lt;br /&gt;
Page instfiles&lt;br /&gt;
Page custom ShowLog&lt;br /&gt;
&lt;br /&gt;
Function .onInit&lt;br /&gt;
	${LogSetFileName} &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
	${LogSetOn}&lt;br /&gt;
	${LogText} &amp;quot;In .onInit&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function OnCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function OnCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Function AfterCustom&lt;br /&gt;
	${LogText} &amp;quot;In Function AfterCustom&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section one&lt;br /&gt;
	${LogText} &amp;quot;In Section One&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section two&lt;br /&gt;
	${LogText} &amp;quot;In Section Two&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Section three&lt;br /&gt;
	${LogText} &amp;quot;In Section Three&amp;quot;&lt;br /&gt;
SectionEnd&lt;br /&gt;
&lt;br /&gt;
Function ShowLog&lt;br /&gt;
	${LogText} &amp;quot;In Function ShowLog&amp;quot;&lt;br /&gt;
	ExecShell &amp;quot;open&amp;quot; &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot;&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
Section &amp;quot;-CleanUp&amp;quot;&lt;br /&gt;
	${LogText} &amp;quot;In Section -CleanUp&amp;quot;&lt;br /&gt;
	${LogSetOff}&lt;br /&gt;
SectionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the result that gets written to &amp;quot;$INSTDIR\MyInstallLog.txt&amp;quot; when running the previous example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
In .onInit&lt;br /&gt;
In Function OnCustom&lt;br /&gt;
In Section One&lt;br /&gt;
In Section Three&lt;br /&gt;
In Section -CleanUp&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this is the macro file TextLog.nsh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
# TextLog.nsh&lt;br /&gt;
# Written by Mike Schinkel [http://www.mikeschinkel.com/blog/]&lt;br /&gt;
# 12/23/2005&lt;br /&gt;
&lt;br /&gt;
Var /GLOBAL __TextLogFileHandle&lt;br /&gt;
Var /GLOBAL __TextLogFileName&lt;br /&gt;
Var /GLOBAL __TextLogState&lt;br /&gt;
&lt;br /&gt;
!define LogText &#039;!insertmacro LOG_TEXT&#039;&lt;br /&gt;
!define LogSetFileName &#039;!insertmacro LOG_SET_FILE_NAME&#039;&lt;br /&gt;
!define LogSetOn &#039;!insertmacro LOG_SET_ON&#039;&lt;br /&gt;
!define LogSetOff &#039;!insertmacro LOG_SET_OFF&#039;&lt;br /&gt;
&lt;br /&gt;
!macro LOG_TEXT TEXT&lt;br /&gt;
	FileWrite $__TextLogFileHandle &amp;quot;${TEXT}$\r$\n&amp;quot;&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
!macro LOG_SET_FILE_NAME filename&lt;br /&gt;
	StrCpy $__TextLogFileName &amp;quot;${filename}&amp;quot;&lt;br /&gt;
	StrCmp $__TextLogState &amp;quot;open&amp;quot; +1 +3&lt;br /&gt;
	!insertmacro LOG_SET_OFF&lt;br /&gt;
 	!insertmacro LOG_SET_ON&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
!macro LOG_SET_ON&lt;br /&gt;
	!define UniqueID ${__LINE__}&lt;br /&gt;
	StrCmp $__TextLogFileName &amp;quot;&amp;quot; +1 AlreadySet_${UniqueID}&lt;br /&gt;
	StrCpy $__TextLogFileName &amp;quot;$INSTDIR\install.log&amp;quot;&lt;br /&gt;
AlreadySet_${UniqueID}:&lt;br /&gt;
	StrCmp $__TextLogState &amp;quot;open&amp;quot; +2&lt;br /&gt;
	FileOpen $__TextLogFileHandle  &amp;quot;$__TextLogFileName&amp;quot;  a&lt;br /&gt;
	StrCpy $__TextLogState &amp;quot;open&amp;quot;&lt;br /&gt;
	!undef UniqueID&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
!macro LOG_SET_OFF&lt;br /&gt;
	StrCmp $__TextLogState &amp;quot;open&amp;quot; +1 +2&lt;br /&gt;
	FileClose $__TextLogFileHandle&lt;br /&gt;
	StrCpy $__TextLogState &amp;quot;&amp;quot;&lt;br /&gt;
!macroend&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Written by [[user:MikeSchinkel|MikeSchinkel]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Code Examples]]&lt;/div&gt;</summary>
		<author><name>MikeSchinkel</name></author>
	</entry>
</feed>