好吧,您当然可以创建一个“一次性记录器”,它可以“自动”记录您选择的方法的信息:
public class EnterExitLogger : IDisposable
{
Logger logger;
string name;
public EnterExitLogger(Logger logger, string name, params object [] args)
{
this.logger = logger;
this.name = name;
this.logger.Debug("Entering {0}", this.name);
int i = 0;
foreach (var a in args)
{
this.logger.Debug("arg[{0}] = {1}", i, a);
i++;
}
}
public void Dispose()
{
this.Logger.Debug("Exiting {0}", this.name);
}
}
然后像这样使用它:
public class MyClass
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public void SomeMethod(int x, int y)
{
using (new EnterExitLogger(logger, "SomeMethod", x, y))
{
//Do your work here
}
}
}
这对我来说并不是一个特别好的主意,我怀疑我自己会不会这样做。另一方面,它确实在不使用 AOP 的情况下实现了某种形式的 Enter/Exit 日志记录。如果您真的想要“自动”进入/退出日志记录,我不确定如何在没有 AOP 或企业库版本(其名称让我忽略了)的情况下实现它。
显然,在我提出的解决方案中创建和处理 EnterExitLogger 会产生一些开销,但对你来说可能还不够。