public interface ILinqToLdapLogger { bool TraceEnabled { get; } void Trace(string message); void Error(Exception ex, string message = null); }Trace is meant for logging query information. I check TraceEnabled before writing information via Trace. Error is always called when exception is encountered. I wasn't sure if I should add logging hooks for error since most projects will handle errors within their own applications, but I figured you could simply ignore calls to Error in your own implementations.
Out of the box I included a basic implementation:
public class SimpleTextLogger : ILinqToLdapLogger { private readonly TextWriter _textWriter; public SimpleTextLogger(TextWriter textWriter) { _textWriter = textWriter; TraceEnabled = true; } public bool TraceEnabled { get; set; } public void Trace(string message) { _textWriter.WriteLine(message); } public void Error(Exception ex, string message = null) { if (message != null) _textWriter.WriteLine(message); ObjectDumper.Write(ex, 0, _textWriter); } }This is mainly used for debugging support, but it also serves as an example implementation. Here's another example using Common.Logging .Net which offers a lot more support for different logging frameworks:
public class CommonLogger : ILinqToLdapLogger { private ILog _errorLog; private ILog _traceLog; public CommonLogger() { _traceLog = LogManager.GetLogger("trace"); _errorLog = LogManager.GetLogger("error"); } public void Trace(string message) { _traceLog.Trace(message); } public void Error(Exception ex, string message = null) { _errorLog.Error(message, ex); } public bool TraceEnabled { get { return _traceLog.IsTraceEnabled; } } }You can attach a log directly to a DirectoryContext or through the LdapConfiguration so it can be used with the ConncectionFactory as well. I'll go into more detail in my next post about the LdapConfiguration changes.
var context = new DirectoryContext() { Logger = new SimpleTextLogger(Console.Out) }; var config = new LdapConfiguration() .LogTo(new SimpleTextLogger(Console.Out)); //will inject the logger for you context = config.CreateContext();
No comments:
Post a Comment