Logger for D (was: Using glog's design for Phobos?)
so
so at so.do
Fri Aug 27 19:44:56 PDT 2010
On Sat, 28 Aug 2010 05:29:53 +0300, Denis Koroskin <2korden at gmail.com>
wrote:
> On Sat, 28 Aug 2010 05:54:40 +0400, so <so at so.do> wrote:
>
>> On Sat, 28 Aug 2010 04:18:52 +0300, sybrandy <sybrandy at gmail.com> wrote:
>>
>>> Here's my current version of the logger. All of the documentation
>>> should be in the logger.d file. I also provided a sample config file
>>> (logger.conf) and a sample test file that I was using for benchmarking
>>> (main.d). Let me know if you have any questions. Feedback on
>>> improving
>>> this is also welcome.
>>>
>>> The one thing I forgot to note in here is that the function that writes
>>> to the log is passed into the second version of the constructor, which
>>> needs to be used only once in the code. A simple log writer is
>>> included
>>> at the bottom of logger.d that does work. The reason I did this was
>>> when I initially asked for feedback, I got several ideas on how the
>>> logger can be improved. Also, I discussed this with a friend of mine
>>> who stated that people may want to log to something other than a file,
>>> such as syslog. So, instead of trying to make the one "end all be all"
>>> logger, I felt that by allowing it to accept a function as a parameter
>>> to the constructor, the person can write to any type of log file,
>>> database, whatever they want and the logger interface works the same no
>>> matter what.
>>>
>>> There currently is a bug somewhere that I don't understand. Even
>>> though
>>> I have "OwnerTerminated" as part of my receive statement, I still see
>>> exceptions when the program closes. However, it doesn't seem to affect
>>> the execution of the logger.
>>>
>>> Enjoy.
>>>
>>> Casey
>>
>> Hello?
>> Couldn't it be just like this?
>>
>> enum log_level {
>> note, // or info whatever
>> warning,
>> error,
>> fatal,
>> }
>>
>> string log_direct(string filename); // returns last log file directed.
>> void log(A...)(A a)
>> {
>> if(typof(a[0]) == log_level)
>> do_level_thingy();
>>
>> ... // rest.
>> }
>>
>> version(debug) void debug_log(A...)(A a) { log(a); }
>> else void debug_log(A...)(A a) {}
>>
>> void main()
>> {
>> std::string old_file = log_direct(new_file); // if you like to
>> change it that is
>> log("log me pretty", arg1, ....);
>> log(error, "log me pretty error", arg1, ...);
>> log(warning, "log me pretty warning", arg1, ...);
>> }
>>
>> Isn't that good/beautiful/flexible enough?
>> Please don't start with instantiated loggers, they are ugly so ugly and
>> unnecessary!
>>
>> Thanks.
>>
>
> Why wouldn't you just keep using writefln for your logging?
>
> I'm afraid you misunderstand why people use logging libraries. I'll try
> to explain: once your project grows big, the amount of log it starts to
> generate may grow *HUGE*. Once there, you understand the importance of
> configuring every bit of the logger. Some logs needs to be disabled,
> some logs need to go to console, some logs need to file A, some to file
> B etc.
>
> That's why it is a standard practice to have *independent* loggers for
> most of your classes. I refuse to use anything that dumps all the logs
> into the same bin - it's a joke and not a logging framework.
There is not a thing in my example that says. "you should dump all the
logs into the same bin".
If you have a closer look at it, and try to be objective and don't take
this serious but i can't find a better phrase for it... Stop being OOP
centric.
If you want me to write this retard extra line every time i want to log,
just because in some company a guy needed this, i am not using your so
clever/complex/... library, that is it.
Logger log(new_file, log_level, ....); // wth?
log(....);
....
What is the big deal here? i just want to write a log to somewhere with
the given level.
99% of the time you won't redirect it anyways. Am i wrong?
log("this : ", that);
log(warning, "this : ", that);
Oh you want to redirect it?
string old = log_direct(new, error);
log(error,
log(error,
...
log_direct(old); // or just make a scoped object there and hide this as
well...
Is these so simple for your needs? Roll/write/buy your own, this is not a
standard library issue.
Thanks!
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
More information about the Digitalmars-d
mailing list