Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Singleton or Static Logger?

Tags:

c#

My current C# application is a single executable (EXE) and a few DLLs (so multiple binaries) and I want to create a LOGGER (some simple custom logger that writes to a single text file no matter where it is being called from - and this should be available in all the binaries (exe and dll's) - note that it is a single threaded application.

Right now I have a DLL (Logger) and it has a class (Log) with a method (trace) which logs, each project adds a reference to this DLL (Logger) and creates its own instance (pass in a file name) and then calls the .Trace(...) function - works fine ...

But I would rather not have to create many different trace files (minimum one per project) and having to create a new instance of Logger each time seems repetitive ... So I was looking into either creating a STATIC logger class or using a SINGLTON ... I am just not sure which is best and why ...

I was hoping someone could maybe point me in the right direction on this, what is the best way to create a logger class (it will be its own DLL) that will be used by many projects (referenced) and they should all write to the same log file...?

Any help would be much appreciated. Thanks,

like image 398
JSchwartz Avatar asked Apr 17 '26 09:04

JSchwartz


1 Answers

You choose between Singleton and Static logger the same way you always choose between the two: Do you want to be able to override methods (or use a Logging interface)? If you use a singleton, you have the opportunity to override methods to change functionality. You can even abstract the behavior away behind an interface.

With a static class you are now and forever tied to that class, and any changes affect everyone.

When dealing with my own systems, i have moved towards singleton instanced objects. It gives a level of flexibility not available with static classes.

like image 182
Ian Boyd Avatar answered Apr 19 '26 21:04

Ian Boyd