Вводить каротаж без загрязнения исходного кода

этот вопрос сейчас наворачивается в моей голове... Для ведения журнала, чтобы быть полезным, он должен быть каждый в коде, но затем он делает код трудным для чтения. Как и следующий код:

public IDictionary<decimal, Status> GetStatus(decimal[] keys)
{
    _logger.Debug("ENTERED GetStatus");

    IDictionary<decimal, Status> statuses = new Dictionary<decimal, Status>();
    string inClause = null;

    inClause = FormatInClause(keys, inClause);
    _logger.DebugFormat(" inClause: '{0}' ", inClause);
    if (string.IsNullOrEmpty(inClause))
    {
        _logger.Error("Key collection is null or empty.");
        throw new Exception("Key collection is null or empty.");
    }

    if (!IsOpen)
        Connection.Open();

    using (IDbCommand cmd = Connection.CreateCommand())
    {
        cmd.CommandText = " select id, date, status " +
            " from ORDERS where id in ( " + inClause + " ) ";

        inClause = null;

        using (IDataReader reader = cmd.ExecuteReader())
        {
            int i = 0;
            while (reader.Read())
            {
                object[] values = new object[reader.FieldCount];

                reader.GetValues(values);
                DebugHelper.LogValues(_logger, " reader.Read() #" + i + " reader.GetValues(values): ", values);

                statuses[(decimal)values[0]] = new Status(
                    (decimal)values[0],
                    ValueOrDefult<string>(values[1]),
                    ValueOrDefult<string>(values[2]),
                    (decimal)values[3],
                    ValueOrDefult<DateTime>(values[4]));
                _logger.DebugFormat(" reader.Read() #{0} created new Status() ", i);

                values = null;
                i++;
            }
        }
    }

    _logger.Debug("EXITED GetStatus");
    return statuses;
}

Есть ли какая-то стратегия для ведения журнала, чтобы не уменьшать читаемость исходного кода?

Ответ 2

imho ваш журнал захламлен, потому что ваш код тоже. Вы должны прочитать принципы SOLID.

Например, переместите код считывателя на отдельный метод.

Ответ 3

Вы можете следовать парам правил.

1) Только ошибки журнала, где вы на самом деле "общаетесь" с ними.

2) Используйте AOP для переноса ваших методов, чтобы вам не приходилось выполнять отладочные операции при вводе и выходе из всех методов. Вы также можете использовать журнал вызовов AOP для входящих и исходящих параметров/ответов методов.

Ответ 4

Посмотрите на ткача аспект, например PostSharp

Ответ 5

Исходный код выглядит хорошо для меня... На самом деле это выглядит так, потому что я вижу сообщения журнала и рисую, что между двумя сообщениями.

Хотя меня беспокоит одно, это действительно _ в _logger.

Некоторые logis apis имеют тенденцию предлагать сокращенный API, например:

l.d("debug")
l.c("critical")
...etc

Как выше, так и на вашем пути оба хороши imho.

ИЗМЕНИТЬ

Если вы все еще хотите что-то сделать, просто обмотайте свои строки журнала в #области и скомпромите их.