I Presume it is the fact that LogInitialized is never initialized which means it might be true when one of the functions is called.

Add at the bottom of the unit

[pascal]
Initialization
LogInitialized := False;
Log := Nil;

Finalization
If Assigned(Log) then
Log.Free;

End.
[/pascal]

I didnlt test it exactly but its something like that.