好吧,在阅读了danben对这个post的回答之后,我想我确信需要写这种代码,至少在很多情况下。我的经理似乎也同意。如何在c#中重构log4net语句?
if (log.IsDebugEnabled)
log.Debug("ZDRCreatorConfig("+rootelem.ToString()+")");
if (log.IsInfoEnabled)
log.Info("Reading Configuration . . .");
它的问题是它错误的挫折感了我看到所有这些if语句随处放置只是做了简单的日志语句。
我的问题是,我们如何可以将这个重构成一个类,而不会重现必须评估日志方法参数的性能问题?
只要把它在一个类的静态方法没有帮助,因为当你传递对象的消息仍必须评估参数:
public class LogHelper {
public static Info(ILog log, Object message) {
if(log.IsInfoEnabled) { log.Info(message); }
}
}
C#显然不支持强制的方法内联,因此解决方案不可用。 MACRO在C#中不受支持。我们可以做什么?!?!
更新: 感谢您的回复,我没有忘记这个;这在我的名单上现在只是很低的优先权。一旦我陷入困境,我会去解决问题并给予答案。谢谢。
另一个更新:
好吧......我还没有看到这一点,而且你们都值得正确的答案;但我同意Tanzelax的答案,因为我认为他们会自动内联。他发布的链接说服了我很好的工作,我现在不应该太担心这个,这也是很好的笑声。我以后会继续关注这些lambda的事情。谢谢您的帮助!
您是否试过NLog? IMO NLog往往比Log4Net更清洁。 – 2010-02-11 22:34:25