www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - std.logger sharedLog usage

reply "lobo" <swamplobo gmail.com> writes:
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
Mar 28 2015
next sibling parent "lobo" <swamplobo gmail.com> writes:
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
Mar 28 2015
prev sibling parent reply "Robert burner Schadek" <rburners gmail.com> writes:
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)
Mar 29 2015
parent reply "lobo" <swamplobo gmail.com> writes:
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.
Mar 29 2015
parent "Robert burner Schadek" <rburners gmail.com> writes:
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
Mar 30 2015