Что логировать в методе

184
29 сентября 2017, 15:38

У меня есть некий класс-сервис. Я хотел бы обвешать его логами на все случаи жизни. Примерно так:

public class MyService 
{
    private readonly MyCache _cache;
    private readonly IRepository _repository;
    private readonly Ilog _log;
    public MyService(IRepository reposotory, MyCache cache, Ilog log)
    {
        _repository = reposotory;
        _cache = cache;
        _log = log;
    }
    public FooViewModel GetFoo(int fooId)
    {
        _log.Info("вызван метод GetFoo. fooId = {0}", fooId);
        try
        {
            string cacheKey = String.Format("GetFoo_{0}", fooId);
            // операции с кэшем не логируем, это происходит внутри самого класса кэша
            FooViewModel res = _cache.Get<FooViewModel>(cacheKey);
            if (res != null) 
            {
                _log.Info("данные получены из кэша. fooId = {0}", fooId);
                return res;
            }
            Foo foo = Repository.AllFoo().First(x => x.Id == fooId);
            res = MyMapper.Map<Foo, FooViewModel>(foo)
            _cache.Add(cacheKey, res);
            _log.Info("данные получены из базы. fooId = {0}", fooId);
            return res.ToArray();
        }
        catch (DatabaseException ex)
        {
            // здесь ничего не логируем, так как выбрасываем исключение вверх,
            // где и будет всё записано в лог
            throw new FooException(ex, "Какое-то сообщение");
        }
    }
}

Вопрос: что тут вообще стоило бы логировать, а что нет? Правильно ли я расставил вызовы логера?

READ ALSO
Передача данных по Bluetooth или же Wi-Fi

Передача данных по Bluetooth или же Wi-Fi

Всем доброго времени суток! Помогите пожалуйстаМне надо создать программу для проведения викторин по английскому

253
Обработка исключающих ситуации

Обработка исключающих ситуации

Хотел задать вопросЯ прочитал что такое try-catch и using, Но не понял в чем разница

230
Десериализация string в List&lt;string&gt;

Десериализация string в List<string>

Вопрос заключается в следующем 1) Есть класс PivotBlock, который содержит среди всех полей поле ColumnField

162