C # log вопрос - PullRequest
       35

C # log вопрос

1 голос
/ 05 мая 2011

Кто-нибудь знает какой-либо способ упорядочить операторы журналирования более удобно?

Я думаю, что такого способа нет, но, ну, вот небольшой пример:

        // Take the longest path in the graph and convert it into the
        // image series, note that we project every element from the
        // sequence into the image path so that 'new Series(...)' constructor
        // could be used.
        var paths = EnumerateSimpleAndLoopedPaths().ToList();

        logger.Log(Something1);

        if (paths.Any())
        {
            // Take the longest possible path.
            var selectedPath = paths.OrderBy(x => x.Count()).Last();

            logger.Log(Something2);

            var imagesForSelectedPath = selectedPath.SelectMany(...

Очевидно,эти logger.Log или Log или какие-либо операторы похожи на мусор для основной части кода, может быть, есть умный способ куда-то их взять?

Я знаю, что есть некоторые хорошиепакеты, такие как PostSharp, что позволяет вести запись до и после - но что, если функции должны регистрировать некоторый промежуточный результат своей работы ?

Или это просто проблема декомпозициии я должен сделать все более разложенным, чтобы я мог пометить все эти регистрируемые записи как [Loggable]?

Любые предложения будут оценены. Что вы делаете со входом в свой код?

Ответы [ 2 ]

1 голос
/ 05 мая 2011

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

или, если вы не хотите использовать слишком много методов в классе, которые можно использовать только в одном месте, ...

определяет внутренний класс для выполнения работы (который автоматически может получить доступ к закрытым членам родительского класса, если вы передадите ссылку на parent в конструктор внутреннего класса).
Внутренний класс может иметь много закрытых методов, к которым могут обращаться только методы внутреннего класса. Поэтому определите один открытый / внутренний метод для внутреннего класса, который будет вызываться методом для внешнего класса.

При обоих подходах вы можете украшать новые методы атрибутами для AOP (например, PostSharp).

0 голосов
/ 05 мая 2011

Из-за ограничений AOP-структур вам придется использовать декомпозицию, чтобы получить все преимущества.Вы должны делать это в любом случае.Методы должны быть очень простыми и делать только одно.Извлеките свою условную логику в метод (ы), затем создайте аспект PostSharp.

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

...