У меня есть некий класс-сервис. Я хотел бы обвешать его логами на все случаи жизни. Примерно так:
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, "Какое-то сообщение");
}
}
}
Вопрос: что тут вообще стоило бы логировать, а что нет? Правильно ли я расставил вызовы логера?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем доброго времени суток! Помогите пожалуйстаМне надо создать программу для проведения викторин по английскому
Хотел задать вопросЯ прочитал что такое try-catch и using, Но не понял в чем разница
Вопрос заключается в следующем 1) Есть класс PivotBlock, который содержит среди всех полей поле ColumnField