using System;
using LibGit2Sharp.Core;
using LibGit2Sharp.Handlers;
namespace LibGit2Sharp
{
///
/// Logging and tracing configuration for libgit2 and LibGit2Sharp.
///
public sealed class LogConfiguration
{
///
/// The default logging configuration, which performs no logging at all.
///
public static readonly LogConfiguration None = new LogConfiguration { Level = LogLevel.None };
///
/// Creates a new logging configuration to call the given
/// delegate when logging occurs at the given level.
///
/// Level to log at
/// Handler to call when logging occurs
public LogConfiguration(LogLevel level, LogHandler handler)
{
Ensure.ArgumentConformsTo(level, (t) => { return (level != LogLevel.None); }, "level");
Ensure.ArgumentNotNull(handler, "handler");
Level = level;
Handler = handler;
// Explicitly create (and hold a reference to) a callback-delegate to wrap GitTraceHandler().
GitTraceCallback = GitTraceHandler;
}
private LogConfiguration()
{
}
internal LogLevel Level { get; private set; }
internal LogHandler Handler { get; private set; }
internal NativeMethods.git_trace_cb GitTraceCallback { get; private set; }
///
/// This private method will be called from LibGit2 (from C code via
/// the GitTraceCallback delegate) to route LibGit2 log messages to
/// the same LogHandler as LibGit2Sharp messages.
///
private void GitTraceHandler(LogLevel level, IntPtr msg)
{
string message = LaxUtf8Marshaler.FromNative(msg);
Handler(level, message);
}
}
}