Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Castle windsor logging facility

I'm trying to remove some logging dependencies and stumbled across Castle Windsor's logging facility. However, I'm kind of skeptical about whether I should use it or not.

public class MyClass
{
    public Castle.Core.Logging.ILogger Logger { get; set; }

    ...
}

Windsor's logging facility requires that you expose your logger as a property. Is that really a good practice? I feel like I'm almost breaking encapsulation because normally when I reuse a component, I don't care about it's logging mechanism and I don't normally want to see it exposed.

If I use a custom wrapper that uses a static class to create the log, I can keep it private. For example:

public class MyClass
{
    private static MyCustomWrapper.ILogger Logger = LogManager.GetLogger(typeof(MyClass));

    ...
}

I've searched the web for reasons why I should use the logging facility, but I'm only finding articles on how to use it, but not why I should use it. I feel like I'm missing the point. Having the logging component exposed is kind of scarying me away.

like image 816
Books Avatar asked Nov 15 '10 12:11

Books


1 Answers

Windsor's logging facility requires that you expose your logger as a property.

Not necessarily. You can also put your logger as a constructor (i.e. mandatory) dependency. The logger is usually declared as a property (i.e optional dependency) because there might be no logger. That is, the component should be able to function without a logger.

If I use a custom wrapper that uses a static class to create the log

That's a service locator, that code couples MyClass to LogManager, which is IMHO worse than what you were trying to get away from.

like image 125
Mauricio Scheffer Avatar answered Sep 30 '22 05:09

Mauricio Scheffer