不记得更好的标题,请随意将其更改为更好的名称:)
我的应用程序包含很多日志记录语句,如下所示:
var logger = new Logger(/*..get flag from settings if the logger should be active..*/);
// ....
logger.LogActivity(..serialize an object..);
//...
logger.LogActivity(..get another object's expensive overriden ToString method..);
//...
logger.LogActivity(..log something new..);
记录器类:
public class Logger
{
private readonly bool _isActive;
public Logger(bool isActive)
{
_isActive = isActive;
}
public void LogActivity(string activity)
{
if (_isActive)
{
// Save activity to Database.
}
}
}
当我在设置中禁用记录器时(因此 Logger 类中的 _isActive 字段为假),则没有任何内容保存到数据库中。但是 Logger.LogActivity 方法中的所有表达式仍然被评估(例如 ..serialize object.. 在前面的例子中),这会减慢我的应用程序。我可以使用这样的日志语句:
var logger = new Logger(/*..get flag from settings if the logger should be active..*/);
// ....
if (loggerIsActive) logger.LogActivity(..serialize an object..);
//...
if (loggerIsActive) logger.LogActivity(..get another object's expensive overriden ToString method..);
//...
if (loggerIsActive) logger.LogActivity(..log something new..);
但是只更改 LogActivity 方法会更好......是否可以以某种方式仅更改 LogActivity 方法,以便在禁用记录器时,不评估 LogActivity 调用中的表达式?好吧 - 如果这在 C# 中是可能的,我会感到惊讶,但是有没有其他方法/模式可以做到这一点?