Thread overview
std.logger sharedLog usage
Mar 29, 2015
lobo
Mar 29, 2015
lobo
Mar 30, 2015
lobo
March 29, 2015
Hi,

I'm trying to use std.experimental.logger and I'd like the logf(), tracef() style functions to log to a file and stdout.
(note: I can use sharedLog.logf(), sharedLog.tracef(), but I prefer just logf())


So I did this:

shared static this() {
    auto ml = new MultiLogger();
    ml.insertLogger("stdout", new FileLogger(std.stdio.stdout));
    ml.insertLogger("applog", new FileLogger("applog.txt"));
    sharedLog = ml;
    logf("This is a test"); // Doesn't work
}


Which doesn't work, so I'm wondering if it's possible to do what I want.


thanks,
lobo
March 29, 2015
On Sunday, 29 March 2015 at 01:36:24 UTC, lobo wrote:
> Hi,
>
> I'm trying to use std.experimental.logger and I'd like the logf(), tracef() style functions to log to a file and stdout.
> (note: I can use sharedLog.logf(), sharedLog.tracef(), but I prefer just logf())
>
>
> So I did this:
>
> shared static this() {
>     auto ml = new MultiLogger();
>     ml.insertLogger("stdout", new FileLogger(std.stdio.stdout));
>     ml.insertLogger("applog", new FileLogger("applog.txt"));
>     sharedLog = ml;
>     logf("This is a test"); // Doesn't work
> }
>
>
> Which doesn't work, so I'm wondering if it's possible to do what I want.
>
>
> thanks,
> lobo

Hmm, I should read code before posting. logf() etc. are using stdThreadLocalLog so this does what I want:

shared static this() {
 auto ml = new MultiLogger();
 ml.insertLogger("stdout", new FileLogger(std.stdio.stdout));
 ml.insertLogger("applog", new FileLogger("applog.txt"));
 stdThreadLocalLog = ml;
 logf("This is a test"); // works :)
}


Minor nitpick: This isn't clear in the docs of std.logger. Throughout sharedLog is referred to as the "default" logger, not stdThreadLocalLog.

Other than that I'm finding std.logger is really easy to use, nice work Phobosians!

bye,
lobo



March 29, 2015
On Sunday, 29 March 2015 at 01:36:24 UTC, lobo wrote:
> Hi,
>
> I'm trying to use std.experimental.logger and I'd like the logf(), tracef() style functions to log to a file and stdout.
> (note: I can use sharedLog.logf(), sharedLog.tracef(), but I prefer just logf())
>
>
> So I did this:
>
> shared static this() {
>     auto ml = new MultiLogger();
>     ml.insertLogger("stdout", new FileLogger(std.stdio.stdout));
>     ml.insertLogger("applog", new FileLogger("applog.txt"));
>     sharedLog = ml;
>     logf("This is a test"); // Doesn't work
> }
>
>
> Which doesn't work, so I'm wondering if it's possible to do what I want.
>
>
> thanks,
> lobo

just add the line stdThreadLocalLog.logLevel = LogLevel.info before logf and it should work. The default LogLevel of the MultiLogger and FileLogger is high than the default LogLevel of stdThreadLocalLog. (I will fix that)

March 30, 2015
On Sunday, 29 March 2015 at 12:37:23 UTC, Robert burner Schadek wrote:
> On Sunday, 29 March 2015 at 01:36:24 UTC, lobo wrote:
>> Hi,
>>
>> I'm trying to use std.experimental.logger and I'd like the logf(), tracef() style functions to log to a file and stdout.
>> (note: I can use sharedLog.logf(), sharedLog.tracef(), but I prefer just logf())
>>
>>
>> So I did this:
>>
>> shared static this() {
>>    auto ml = new MultiLogger();
>>    ml.insertLogger("stdout", new FileLogger(std.stdio.stdout));
>>    ml.insertLogger("applog", new FileLogger("applog.txt"));
>>    sharedLog = ml;
>>    logf("This is a test"); // Doesn't work
>> }
>>
>>
>> Which doesn't work, so I'm wondering if it's possible to do what I want.
>>
>>
>> thanks,
>> lobo
>
> just add the line stdThreadLocalLog.logLevel = LogLevel.info before logf and it should work. The default LogLevel of the MultiLogger and FileLogger is high than the default LogLevel of stdThreadLocalLog. (I will fix that)

Thank you, lobo.
March 30, 2015
On Monday, 30 March 2015 at 04:05:12 UTC, lobo wrote:
>
> Thank you, lobo.

next version will have equal default LogLevel for all Logger.
https://github.com/D-Programming-Language/phobos/pull/3124