Skip to content
⌘ NSIS Forum Archive

LogEx plugin

73 posts

jpderuiter#

LogEx plugin

I have created a new Logging plugin:
http://nsis.sourceforge.net/LogEx_plug-in

With this plugin you can:
- Open a new or existing logfile, and append strings to it.
- Copy this string to the Status Listbox and/or Statusbar. (like DetailPrint)
- Append an existing file to the log file (esp. usefull when executing a console app)
--- Add a prefix to each new line of this file.
--- Choose which lines from this file to append.

Example:


LogEx::Init /NOUNLOAD "$TEMP\log.txt"
LogEx::Write /NOUNLOAD "Write this line to the log file only"
LogEx::Write /NOUNLOAD "Write this line to the log file and the status list box" true
LogEx::Write /NOUNLOAD "Write this line to the log file, the status list box and \
the statusbar" true true
LogEx::Write /NOUNLOAD 'Write complete "dir" output to the log file with ">" as prefix'
ExecDos::exec 'cmd /C dir' "" "$TEMP\output.log"
LogEx::AddFile /NOUNLOAD "$TEMP\output.log" ">"
LogEx::Write /NOUNLOAD 'Write "dir" output from line3 to the log file'
ExecDos::exec 'cmd /C dir' "" "$TEMP\output.log"
LogEx::AddFile /NOUNLOAD "$TEMP\output.log" "" 3
LogEx::Write /NOUNLOAD 'Write "dir" output from line3 to line6 to the log file'
ExecDos::exec 'cmd /C dir' "" "$TEMP\output.log"
LogEx::AddFile /NOUNLOAD "$TEMP\output.log" "" 3 6
LogEx::Close
Please give your comments.

JP de Ruiter
palecekp#
stack problem

Hi,

I found your plugin for logging and try to use it.

There is a little bit problem with LogEx::Write function, which totaly destroy (clean) the stack (maybe more 'pops' then 'pushs').

I didn't tested another functions in library.

In other way, library looks very usefull.

Best regards Pavel Palecek
jpderuiter#
RE: stack problem

Hi,

Thanks for trying.🙂

maybe more 'pops' then 'pushs'
you are right.
It did always read the max number of parameters, so when you specified less parameters then max, there where more pops then pushes. 🙄

I did fix this (I changed the order of parameters: optional parameters first, and check if they are valid)

Also did the following:
v0.2
- Fixed stack bug.
- Added parameter "bAppendToFile" to Init function
- Changed the way AddFile function reads the file (read the file at ones in a buffer allocated with VirtualAlloc)
- Added comments in sourcecode

See the plugin page at http://nsis.sourceforge.net/LogEx_plug-in for version 0.2

Hope you can use this plugin.
JP
jpderuiter#
I found a small bug with v0.2
When the function AddFile was used with an empty file, the installer crashed.

I uploaded a new version: 0.3.
It checks the filesize, and if zero returns right away.

Best regards,
Jan Pieter
jpderuiter#
P.S.: the example in the first post doesn't work anymore.

See http://nsis.sourceforge.net/LogEx_plug-in for a valid example.

JP
palecekp#
Re: RE: stack problem

Hi,

plugin works very well, in my case, now.

Thank you

Pavel Palecek
djg72#
Problems with Append

I am trying to write a script using LogEx. It installs SQL Express and then reboots. I seem to only get log entries from after the reboot.

I tried using the bAppendToFile:
LogEx::Init /NOUNLOAD bAppendToFile "$INSTDIR\InstallLog.txt"
Which created a file named "bAppendToFile" on my desktop.

I also tried:
LogEx::Init /NOUNLOAD /bAppendToFile "$INSTDIR\InstallLog.txt"
Which didn't seem to create a file at all.

I may have my syntax wrong, could you post an example with the correct syntax for appending to a file?

Thanks.
jpderuiter#
Hello djg72,

thanks for trying this plugin!

You pointed my to a small error in the readme file:
In the readme file I talked about 'bAppendFile' , while I actually use 'bTruncateFile'. I fixed it now.
Thanks for that.

Now to your problem:
I used the so called 'Hungarian' variable namestyle.
This means that I added a 'b' in front of the variable name when it's a boolean variable.
So bTruncateFile is a boolean variable.

To use truncation (when the logfile already exist, all data will be erased), use the following code:
LogEx::Init /NOUNLOAD true "$INSTDIR\InstallLog.txt"
When you use the following code:

LogEx::Init /NOUNLOAD "$INSTDIR\InstallLog.txt"
and the logfile already exists, the existing data will not be deleted.

Hope this will help you.

Best regards,
Jan Pieter
djg72#
Thanks

Thank you for your reply. I had originally tried using the line you suggested and it didn't work. Thank you also for clearing up that 'bTruncateFile' and 'bAppendFile' are the true and false of the same variable.

I figured out my problem was I tried to open the logfile in the .onInit function which was trying to write to a directory that didn't exist. Once rebooted, the directory existed and the logfile could be written.

I changed:

Function .onInit
;Open Log file
LogEx::Init /NOUNLOAD "$INSTDIR\InstallLog.txt"
LogEx::Write /NOUNLOAD "Function .onInit : Log File Opened..."
To this:

Function .onInit
;Open Log file
SetOutPath "$INSTDIR"
LogEx::Init /NOUNLOAD "$INSTDIR\InstallLog.txt"
LogEx::Write /NOUNLOAD "Function .onInit : Log File Opened..."
Maybe this will help someone.

Thanks again for your help and this plugin works great.
lushdog#
I'm getting a "ÿþ" when I try to append a few particular files to the log.

They are logs from the most recent version of MS SQL Express so I'm thinking it's an encoding issue (i.e. not plain text).

Any ideas?
lushdog#
It's because the SQL server log uses UTF-Little Endian encoding rather than ASCII.

It works if I convert the logfile to asciI "c:\type unicode.txt > ascii.txt".

My only problem is that "type.exe" isn't anywhere on my windows install so I'm having problems running it with "exec" or with the "execdos" plugin.
jpderuiter#
It's 'part' of the command shell.
try: '$SYSDIR\cmd.exe /c "type unicode.txt > ascii.txt"'
lushdog#
Or:

ReadEnvStr $R0 COMSPEC
ExecWait '"$R0" /C TYPE "c:\summary.txt" > "c:\SummaryAscii.txt"'

Thanks a bunch!!!
fantrs91#
Hi,
I'm using your plugin and it's really helpful 🙂

I have one minor issue with it: when using logex::Close, the log file I generate gets 2 blank lines at the end.

Is there a way to avoid having blank lines at the end of the file ?

Thanks
jpderuiter#
Hi,

great to hear you like my plugin.

About your issue: I have never seen this.
All my generated log files end without extra lines.
Can you give me a piece of code with which I can reproduce this?

BTW, you mentioned that this happens when you use ::Close.
Does this mean that if you don't use ::Close, the logfile does not have these extra lines?

Best regards,
Jan Pieter
jpderuiter#
Hi,

I looked in it a little further, and I was able to reproduce your issue.
It turned out that I never closed the plugin properly in my own installer 🙄
I fixed the plugin, so you shouldn't see this issue anymore with v0.4
(see http://nsis.sourceforge.net/LogEx_plug-in)

Thanks for pointing me to this 🙂

Regards,
Jan Pieter
fantrs91#
Hi,
You are right, I did not have the blank lines when NOT using logex::Close , with plugin version 0.3 .

I just downnloaded and installed version 0.4 and it now works perfectly :-)

Thanks a lot!
baxi#
Read right on the file

I tried your plugin and found it to be quite usefull. I have only one problem with it: the file cannot be read while it is opened via your plugin. I would suggest the to change the dwShareMode parameter in the CreateFile function at least to 1:

if(!strcmp(buf,"true"))
{
popstring(buf); // Get Second parameter from the stack (should be the log filename)
// Open an existing file and overwrite, or create a new file, without sharing
hFile=CreateFile(buf,FILE_WRITE_DATA,1,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL
,NULL);
}// else open an existing file and append, or create a new file, without sharing
else hFile=CreateFile(buf,FILE_APPEND_DATA,1,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,N
ULL);
jpderuiter#
Hello baxi,

good suggestion.
I updated the plugin, you can find it here:
http://nsis.sourceforge.net/LogEx_plug-in

Can you please confirm that it's working, because I'm not able to test the plugin right now.

Regards,
JP
knippenberg#
LogEx with NSIS Unicode branch

Hi JP,

I have been using your plugin for several weeks now and it worked fine so far. Just today I switched to the unicode build of nsis available at http://www.scratchpaper.com/, since we needed to support unicode languages in our installer. Since then, it seems that your plugin doesn't work any more. I copied the LogEx.dll to the new plugin subfolder and don't get any errors on compiling. When I run the installer, it creates a file named "t" in the installer's directory, and doesn't create any logfiles any more.

Any ideas on this? I think it may be due to the fact that the whole installer script is now provided as UTF8-encoded file rather than ANSI.

Thanks for your efforts,

Stefan
jpderuiter#
Hi Stefan,

since more people asked for Unicode support, I decided to implement it in the LogEx plugin.
(It turned out to to be quiet easy actually).

I updated the plugin, you can find it here:
http://nsis.sourceforge.net/LogEx_plug-in

I tried it with non-Unicode, and that works.
Can you please confirm that it's working for Unicode as well?

Regards,
JP
knippenberg#
Hi JP,

thanks for your quick response! In tried the update immediately (well... immediately as i read your post 🙂) but couldn't get it to work...

I still have the same issue with the "t" file in the setup.exe directory. When opening it with notepad, I can see that there are several lines with one character. It contains t's and f's, so my guess is that LogEx accidentally logs the calls to the LogEx routine itself.

I use it like this:


Section "Required components" SEC01

....

LogEx::Init /NOUNLOAD true "${INSTALL_LOGFILE}"
LogEx::Write /NOUNLOAD false false "logging started..."
The call to Init seems to create the "t" file, and all succeeding calls to Write seem to add one line with the letter t or f to the file, most probably depending on which parameters I use.
At the point of the init call, the directory for INSTALL_LOGFILE already exists.

Any idea what I'm doing wrong here?

Thanks,

Stefan
jpderuiter#
Hi Stefan,

OK, so appearantly it isn't that easy.
I installed the Unicode version, and got the same problems you have.

I'm not sure what the problem is, I haven't found it so far.
I'll let you know when I found the solution.

JP
jpderuiter#
Hi Stefan,

it took some longer than I thought, but I finally have made a (separate) Unicode plugin.
It is included in the zip file from http://nsis.sourceforge.net/LogEx_plug-in.

Hope you can still use it.

Best regards, JP

P.S.: Also used the new NSIS 2.42 API library with this version (0.7)
jpderuiter#
I uploaded v0.7.1, which now uses the PluginCallback function from the new NSIS API lib, so /NOUNLOAD is no longer required.

Regards,
JP
knippenberg#
Hi JP,

just noticed your post, I definetely can still use it and will try it asap. Thanks for your efforts!

Stefan