Voting: std.logger
Dicebot via Digitalmars-d
digitalmars-d at puremagic.com
Tue Aug 26 18:09:21 PDT 2014
On Wednesday, 27 August 2014 at 00:09:15 UTC, Marco Leise wrote:
> As far as I know, exactly this is not possible with the
> current GC implementation. The exception you catch there has
> just been allocated somewhere deeper in the log function. But
> all GC allocations in a GC invoked dtor cause MemoryErrors and
> program abortion/crashes. :(
>
> In a perfect world I'd imagine you can set up a fallback
> logger. So if the disk is full an exception is thrown by e.g.
> std.stdio.File, which is passed as an error level log message
> to the fallback logger, which might write to stderr:
> "ERROR: Could not write the following message to logXYZ:
> <message>
> The reason was: Disk full"
I don't think it will help either. The very moment exception is
allocated inside std.stdio.File your program will crash, it won't
get to fallback. Only solution is to implement your logger as
@nothrow thing by using only C functions internally instead of
std.stdio - something that feels overly limited for a general use
case. I really think this is the case where you should roll your
own FileNoThrowingLogger and go with it.
In a long term this is something much better to be fixed in GC
implementation than constantly hacked in stdlib modules.
More information about the Digitalmars-d
mailing list