Creating a logging library and have questions
Steve Teale
steve.teale at britseyeview.com
Sat Feb 6 08:00:58 PST 2010
sybrandy Wrote:
> On 02/03/2010 12:03 AM, Rainer Deyke wrote:
> > sybrandy wrote:
> >> 1) I use the current core.thread library and put all my messages in a
> >> buffer that the thread checks periodically, pulls off a new message, and
> >> then writes it to a file. There will be some work to make sure nothing
> >> collides with each other, but I think I can manage it.
> >
> > Wouldn't this allow logging messages to be lost before a hard crash? To
> > me, that would greatly reduce the utility of the logging system.
>
> If done improperly, yes, it would. My hope is that if I did go with
> this method, I would try to find a way to ensure no data was lost.
> Oddly enough, I'm currently having that problem with the single-threaded
> version for some reason. The test program will stop and some of the
> logging statements never make it to the file.
> >
> >> 3) Something else. I really don't have much experience with threading,
> >> so I'm being very careful and really want to understand it. This
> >> library looks to be a good way to learn, however if it's not the best
> >> way to do things, then what would be?
> >
> > Global mutex associated with the logging system. Lock, output, unlock.
> > There are scalability issues with that approach, but I don't see why it
> > wouldn't work in this situation. (Plus, if you have a message queue,
> > you probably need to protect that queue with a mutex anyway.)
> >
> >
>
> Understood. My goal is that if I do put the writing in another thread,
> I do my best to ensure it will scale. I have a tendency to put a lot of
> logging statements in code when I'm trying to debug something, so I
> don't want to slow things down too much nor do I want to lose anything.
> In short: I want the log writing to be as out of the way as possible.
>
> Casey
I second Rainer. A logging system should commit (at least) error messages immediately, particularly if the application has multiple threads. Otherwise it is going to make debugging a crashing system a nightmare. When I do it I just stick 'synchronized' in front of the statement that does the write.
More information about the Digitalmars-d-learn
mailing list