Voting: std.logger
Martin Nowak via Digitalmars-d
digitalmars-d at puremagic.com
Fri Aug 1 08:27:28 PDT 2014
On 08/01/2014 05:56 AM, Martin Nowak wrote:
> On 07/30/2014 01:09 AM, Robert burner Schadek wrote:
>>
>> I'm not sure how you except log(LogLevel.xxxx, "Hello world") to be
>> disabled at compile time if LogLevel.xxxx is a runtime value? Or do I
>> misunderstood you?
>>
>> you can choose to disable name based logging like trace("Hello trace")
>> at CT with the current release
>
> Here is a proof of concept to achieve this.
> http://dpaste.dzfl.pl/95fb6a4e086d
> It works by creating a different type for each loglevel.
Just checked tested this.
static struct TestLogger
{
enum minLogLevel = LogLevel.error;
void write(in LogEntry e) { _entries ~= e; }
const(LogEntry)[] _entries;
}
void main()
{
TestLogger logger;
logger.log(LogLevel.debug_, "foobar");
}
The call logger.log(LogLevel.debug_) can be completely removed by the
compiler. The delegates for the lazy parameters are still generated though.
Either fixing
[`--gc-sections`](https://issues.dlang.org/show_bug.cgi?id=879) or
adding [LTO](https://github.com/ldc-developers/ldc/issues/693) would help.
Also dmd (but not LDC) has a
[bug](https://issues.dlang.org/show_bug.cgi?id=8615) where it still adds
a few instructions to pass the delegate (even though the function is
never called).
So I think it's an appropriate solution to the problem.
http://dpaste.dzfl.pl/95fb6a4e086d
More information about the Digitalmars-d
mailing list