Как я могу ввести свойство только для одного вызова в Log4Net - PullRequest
2 голосов
/ 26 января 2012

Я хочу добавить информацию о типе в лог-вызов, например,

public sealed class Logger
{
    private readonly log4net.ILog _logger;

    public Logger()
    {
        // somehow assing this._logger ... doesn't matter actually
    }

    public void Info<T>(string message)
    {
        if (!this._logger.IsInfoEnabled)
        {
            return;
        }

        var typeOfT = typeof (T);
        var typeName = typeOfT.FullName;

        // how to set a property here, only for this one single call
        // which i can reference in the config

        this._logger.Info(message);
    }
}

Комментарий проясняет: в какой-то момент я хотел бы добавить FullName моего общегопараметр только для этого конкретного вызова.

Я использую log4net 1.2.11.0

1 Ответ

5 голосов
/ 26 января 2012

На самом деле все довольно просто:

public class Foo : log4net.Core.LogImpl
{
    private static readonly Type DeclaringType = typeof (Foo);

    public Foo(log4net.Core.ILoggerWrapper loggerWrapper)
        : this(loggerWrapper.Logger) {}

    public Foo(log4net.Core.ILogger logger)
        : base(logger) {}

    protected LoggingEvent GetLoggingEvent<T>(Level level, string message, Exception exception = null)
    {
        var loggingEvent = new LoggingEvent(DeclaringType, this.Logger.Repository, this.Logger.Name, level, message, exception);
        loggingEvent.Properties["type"] = typeof (T).FullName;

        return loggingEvent;
    }

    public void Info<T>(string message)
    {
        if (!this.IsInfoEnabled)
        {
            return;
        }

        var loggingEvent = this.GetLoggingEvent<T>(Level.Info, message);

        this.Logger.Log(loggingEvent);
    }

    public void Info<T>(string message, params object[] args)
    {
        if (!this.IsInfoEnabled)
        {
            return;
        }

        message = string.Format(message, args);

        var loggingEvent = this.GetLoggingEvent<T>(Level.Info, message);

        this.Logger.Log(loggingEvent);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...