std.logger

String logging facilities for Phobos.

Docu:
http://burner.github.io/phobos/phobos-prerelease/std_logger_core.html
http://burner.github.io/phobos/phobos-prerelease/std_logger_stdiologger.html
http://burner.github.io/phobos/phobos-prerelease/std_logger_filelogger.html
http://burner.github.io/phobos/phobos-prerelease/std_logger_multilogger.html
http://burner.github.io/phobos/phobos-prerelease/std_logger_nulllogger.html
http://burner.github.io/phobos/phobos-prerelease/std_logger_templatelogger.html

dub
http://code.dlang.org/packages/logger
Using overloading here helps documentation (the four forms are clearly identifiable) and slightly helps implementation (IMO): 
```d
void log(Args...)(LogLevel logLevel, bool cond, Args args);

void log(Args...)(LogLevel logLevel, Args args)
	if(!is(Unqual!(Args[0]) == bool));

void log(Args...)(bool cond, Args args)
	if(!is(Unqual!(Args[0]) == LogLevel));

void log(Args...)(Args args)
	if(staticIndexOf!(Unqual!(Args[0]), LogLevel, bool) == -1 && !is(Unqual!(Args[1]) == bool));
```
Omitted defaulted template parameters and the return type for simplicity (I tested the above constraints locally).

The template constraints aren't terribly pretty, but overall it's better for the documentation than just having an opaque variadic argument list.

Also, why is the logger reference returned by reference? That seems like a mistake.