Old 13th February 2007, 01:43   #1
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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:

code:

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
jpderuiter is offline   Reply With Quote
Old 16th February 2007, 11:44   #2
palecekp
Junior Member
 
Join Date: Feb 2007
Posts: 2
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
palecekp is offline   Reply With Quote
Old 16th February 2007, 22:49   #3
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
RE: stack problem

Hi,

Thanks for trying.

Quote:
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 is offline   Reply With Quote
Old 17th February 2007, 00:35   #4
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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 is offline   Reply With Quote
Old 18th February 2007, 21:36   #5
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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
jpderuiter is offline   Reply With Quote
Old 19th February 2007, 08:14   #6
palecekp
Junior Member
 
Join Date: Feb 2007
Posts: 2
Re: RE: stack problem

Hi,

plugin works very well, in my case, now.

Thank you

Pavel Palecek
palecekp is offline   Reply With Quote
Old 30th March 2007, 22:37   #7
djg72
Junior Member
 
Join Date: Mar 2007
Posts: 2
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:
code:
LogEx::Init /NOUNLOAD bAppendToFile "$INSTDIR\InstallLog.txt"


Which created a file named "bAppendToFile" on my desktop.

I also tried:
code:
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.
djg72 is offline   Reply With Quote
Old 31st March 2007, 13:14   #8
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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:
code:
LogEx::Init /NOUNLOAD true "$INSTDIR\InstallLog.txt"
When you use the following code:
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
jpderuiter is offline   Reply With Quote
Old 2nd April 2007, 18:40   #9
djg72
Junior Member
 
Join Date: Mar 2007
Posts: 2
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:
code:

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


To this:
code:

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.
djg72 is offline   Reply With Quote
Old 27th August 2007, 12:50   #10
lushdog
Junior Member
 
Join Date: Jul 2007
Posts: 37
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 is offline   Reply With Quote
Old 27th August 2007, 12:56   #11
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
Can you send me a log file?
I don't have SQL server installed right now.

Regards, JP
jpderuiter is offline   Reply With Quote
Old 27th August 2007, 14:03   #12
lushdog
Junior Member
 
Join Date: Jul 2007
Posts: 37
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.
lushdog is offline   Reply With Quote
Old 27th August 2007, 14:22   #13
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
It's 'part' of the command shell.
try: '$SYSDIR\cmd.exe /c "type unicode.txt > ascii.txt"'
jpderuiter is offline   Reply With Quote
Old 27th August 2007, 14:24   #14
lushdog
Junior Member
 
Join Date: Jul 2007
Posts: 37
Or:

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

Thanks a bunch!!!
lushdog is offline   Reply With Quote
Old 27th August 2007, 14:27   #15
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
Your welcome.
Thanks for using my plug-in.
jpderuiter is offline   Reply With Quote
Old 25th April 2008, 16:41   #16
fantrs91
Junior Member
 
Join Date: Apr 2008
Posts: 5
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
fantrs91 is offline   Reply With Quote
Old 25th April 2008, 23:34   #17
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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 is offline   Reply With Quote
Old 26th April 2008, 19:04   #18
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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
jpderuiter is offline   Reply With Quote
Old 28th April 2008, 12:17   #19
fantrs91
Junior Member
 
Join Date: Apr 2008
Posts: 5
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!
fantrs91 is offline   Reply With Quote
Old 8th October 2008, 15:16   #20
baxi
Junior Member
 
Join Date: Oct 2008
Posts: 4
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);
baxi is offline   Reply With Quote
Old 8th October 2008, 18:20   #21
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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
jpderuiter is offline   Reply With Quote
Old 8th October 2008, 18:35   #22
baxi
Junior Member
 
Join Date: Oct 2008
Posts: 4
Hi,

I tried it and its working fine

Baxi
baxi is offline   Reply With Quote
Old 9th October 2008, 17:17   #23
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
Thanks for trying and letting me know.

I hope you find this plugin usefull

JP
jpderuiter is offline   Reply With Quote
Old 28th November 2008, 16:29   #24
knippenberg
Junior Member
 
Join Date: Nov 2008
Posts: 5
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
knippenberg is offline   Reply With Quote
Old 28th November 2008, 17:35   #25
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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
jpderuiter is offline   Reply With Quote
Old 1st December 2008, 10:49   #26
knippenberg
Junior Member
 
Join Date: Nov 2008
Posts: 5
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:

code:

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
knippenberg is offline   Reply With Quote
Old 1st December 2008, 21:09   #27
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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 is offline   Reply With Quote
Old 30th December 2008, 12:24   #28
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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 is offline   Reply With Quote
Old 31st December 2008, 10:22   #29
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
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
jpderuiter is offline   Reply With Quote
Old 7th January 2009, 08:51   #30
knippenberg
Junior Member
 
Join Date: Nov 2008
Posts: 5
Hi JP,

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

Stefan
knippenberg is offline   Reply With Quote
Old 7th January 2009, 11:06   #31
knippenberg
Junior Member
 
Join Date: Nov 2008
Posts: 5
Hi again,

I tested the new version but still have the same issue as before. I also tried with the provided example in the zip file:
converted to unicode,
compile (success),
execute (file t with singular character per row)

I went as far as deinstalling both the normal and the unicode version of nsis and installing a fresh 2.42 unicode version, so I won't accidentally use the wrong version. Still the same... I removed the /NOUNLOAD parameter as well.

For LogEx, I first just copied the dll in the unicode folder to the nsis plugin directory.
Also tried extracting everything in the zip to the nsis root dir, leaving me with one LogEx.dll in \Plugins and one LogEx.dll in Plugins\Unicode. Neither version works for me...
Any ideas?

Stefan
knippenberg is offline   Reply With Quote
Old 7th January 2009, 15:14   #32
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
Hi Stefan,

Removing the /NOUNLOAD in the Unicode version appearantly doesn't work.
But when I use the /NOUNLOAD, the Unicode version works OK.
Can you try the attached Unicode example?
It isworking fine here.

I will ask jimpark about the /NOUNLOAD.

Regards, JP
Attached Files
File Type: nsi exampleu.nsi (1.8 KB, 424 views)
jpderuiter is offline   Reply With Quote
Old 7th January 2009, 19:48   #33
jimpark
Senior Member
 
Join Date: Sep 2007
Posts: 204
I was able to make the LogEx plugin work simply by using the right pluginapi.lib. However, the DosEx plugin needs to be ported over also for the exampleu.nsi to work.

Unicode NSIS advocate -- http://www.scratchpaper.com for latest build and source.
jimpark is offline   Reply With Quote
Old 7th January 2009, 21:18   #34
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
Hi Stefan,

I released a new version of the LogEx plugin, which in combination with the new NSIS 2.42 Unicode (not available yet) will work without the /NOUNLOAD.

Best regards, JP

P.S.: jimpark, you're right, I forgot to mention that the ExecDos plugin does not work with Unicode.
I used a logfile created with the non Unicode ExecDos plugin which I converted to Unicode manually.
jpderuiter is offline   Reply With Quote
Old 8th January 2009, 12:29   #35
knippenberg
Junior Member
 
Join Date: Nov 2008
Posts: 5
Hi JP,

using your latest plugin version, it works without any other changes Thanks for your and jimpark's efforts
knippenberg is offline   Reply With Quote
Old 23rd March 2009, 11:58   #36
silo5
Junior Member
 
Join Date: Mar 2009
Posts: 16
Hi JP, I'm using your plugin, version 0.7.2, thank you.

Normally it works just fine, but it seems to leave dirt on the stack when the current page isn't InstallFiles.
My installer has just one single custom page and no standard pages. I want to add to the log file but not to the details window, because there is no details window!
LogEx::Write false "text" should work, but the stack is dirty afterwards.

Another issue that I'm having is that even after LogEx::Close the installer can't delete the logfile:

Delete $logfile

doesn't do anything (I verified that the $logfile holds the full path).

Last edited by silo5; 23rd March 2009 at 14:46.
silo5 is offline   Reply With Quote
Old 23rd March 2009, 18:09   #37
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
Hi silo5,

as I'm on vacation right now, I'm not able to look into your problem.
But I'll have a look at it as soon as I can.

Regards,
JP
jpderuiter is offline   Reply With Quote
Old 23rd March 2009, 20:07   #38
silo5
Junior Member
 
Join Date: Mar 2009
Posts: 16
Enjoy your vacation!
silo5 is offline   Reply With Quote
Old 26th March 2009, 22:47   #39
jpderuiter
Major Dude
 
Join Date: Feb 2007
Posts: 672
Hi silo5,

thanks, I did enjoy my vacation indeed.

About your issues:
The first one is because of me being lazy: It only checks for a "true", and doesn't expect a "false".
In fact I expect that "false" is written to the logfile instead of "text"...
I will fix this in a new version, but for now you can use
code:

LogEx::Write "text"


instead.
As no "true" is found, it assumes it's false.

When checking for your second issue, I found that the logfile is released as soon as Logex::Close is called.
(The logfile is locked indeed while the Logex plugin has it opened).
Also calling Delete $logfile afterwards removed the logfile from my system.

Can you give me a script in which this issue happens, so that I can reproduce it?

Regards JP
jpderuiter is offline   Reply With Quote
Old 27th March 2009, 07:27   #40
silo5
Junior Member
 
Join Date: Mar 2009
Posts: 16
Quote:
Originally posted by jpderuiter
It only checks for a "true", and doesn't expect a "false"...
I will fix this in a new version
When you do, check also that if "text" starts with a number it is taken to be "true" instead of being "text". I have this comment in my notes from a while ago, I did not check if you've already fixed this issue in the latest version.
Quote:
When checking for your second issue, ... Can you give me a script in which this issue happens
I'll try
silo5 is offline   Reply With Quote
Reply
Go Back   Winamp & SHOUTcast Forums > Developer Center > NSIS Discussion

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump