Я бы сказал, что кэширование - это деталь реализации поиска данных.Что касается PersonService, у него есть PersonRepository, который он может использовать для получения своих данных.Факт, что это может быть в памяти или в БД, является деталью, о которой не нужно заботиться.Поэтому я говорю, что кэширование происходит на уровне доступа к данным.
Что касается ведения журналов, это может быть где угодно и где угодно.Там действительно нет "неправильного" места для регистрации.(Вот почему это обычно рассматривается как «сквозная проблема», и почему люди будут использовать AOP для регистрации, см. Обсуждение здесь: Рекомендации по AOP с C # )