运行时如何在Postsharp中开启/关闭跟踪?

4

请问在PostSharp中,我是否可以在运行时打开/关闭跟踪?我需要写更少的代码,所以最近我只是将其删除了。跟踪功能是暂时需要的。

也许有一种带有运行时开关功能的替代品可以使用吗?

更新1:我想到了一个主意,但不知道是否好用。以下是一个例子。

    public class Smth
    {
        private long i = 0;

        [TraceAttribute]
        public void Execute()
        {
            Console.WriteLine("Execute call" + i++);
            Thread.Sleep(200);
        }
    }

    [Serializable]
    public class TraceAttribute : OnMethodBoundaryAspect
    {
        public override void OnEntry(MethodExecutionArgs args)
        {
            if(Manager.IsEnabled)
            {
                Console.WriteLine();
                Console.WriteLine(string.Format("Entering {0}", args.Method.Name));
            }
        }

        public override void OnExit(MethodExecutionArgs args)
        {
            if(Manager.IsEnabled)
            {
                Console.WriteLine(string.Format("Leaving {0}", args.Method.Name));
                Console.WriteLine();
            }
        }
    }

    public static class Manager
    {
        public static bool IsEnabled { get; set; }

        static Manager()
        {
               IsEnabled = true;
        }
    }

通过更改“IsEnabled”属性,我能够打开/关闭跟踪... 有其他建议吗?


你所说的“临时”是什么意思?如果你想要创建一个用于跟踪的aspect,可以使用multicasting(1行代码)来应用它,完成后再将其删除。如果你想通过配置文件来进行配置,则只需设置你的aspect与配置文件一起工作即可。为什么不直接使用.NET内置的跟踪功能呢? - Dustin Davis
我需要为大量方法创建跟踪日志,因此我选择了PostSharp,但我还需要具有运行时开/关功能。这些跟踪日志是临时功能,稍后将被删除->因此我不想将其集成到我的程序中->因此稍后将很容易将其删除。 - GaaRa
你是想在单个生产构建中拥有打开/关闭跟踪的能力吗?还是想要在不同构建之间切换的能力。 - Jason Coyne
@JasonCoyne 我假设不需要重建,因为他说了运行时,这让我相信是配置设置的问题。否则我会采取完全不同的路线。 - Dustin Davis
1个回答

1

如果只是临时的话,你现在所拥有的已经足够了。可以使用多播轻松应用该方面。请参阅我的文章http://www.sharpcrafters.com/blog/post/Day-2-Applying-Aspects-with-Multicasting-Part-1.aspxhttp://www.sharpcrafters.com/blog/post/Day-3-Applying-Aspects-with-Multicasting-Part-2.aspx

免责声明:我假设OP想要在不重新构建的情况下完成此操作,因为他提到了运行时,这让我相信他想要一个配置设置。否则,我会建议采取完全不同的路线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,