Theoretical Best Practices

DarthCthulhu via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Aug 14 15:25:14 PDT 2015


On Friday, 14 August 2015 at 12:40:08 UTC, Steven Schveighoffer 
wrote:
>
> I would do it this way:
>
> // at module level
> debug(logging) {
>     Logger logger;
>     static this() { logger = new Logger;}
> }
>
> If you want to have the logger be global, add 'shared' to both 
> the logger and the static this.
>
> This initializes the data before main() is run, so there is no 
> need for singletons.
>
> The added bonus here is that you can't accidentally log stuff 
> when debug(logging) isn't enabled, as the variable will not 
> exist.
>
> -Steve

Ahh, that is a much cleaner way to do it rather than using a 
singleton.

By 'module level', I assume you mean in the module that defines 
the Logger class? An 'import debug.logger' or somesuch would then 
give all relevant modules access, correct?

Is the compiler smart enough to compile out all the symbols 
associated with the logger if it is never instantiated?


More information about the Digitalmars-d-learn mailing list