log4net日志记录器能否做到像这样的事情?
logger.Debug("username : {0} password : {1} server : {2}",username,server,password)
还是只剩下丑陋的"+"
拼接选项了。
你可以用两种方式实现
log.Debug(String.format("username : {0} password : {1} server : {2}",username,server,password));
或者使用默认的API
logger.DebugFormat("username : {0} password : {1} server : {2}",username,server,password)
ToString()
调用的CPU成本。所有其他的字符串格式化方法都没有这种优化。 - Mike AsdfDebugFormat
方法的第一行检查日志级别,并且如果较低则可能返回。但是 .NET 将始终在调用方法之前评估您传递的所有表达式。在上面的示例中,我仅传递对象引用,因此没问题。但是,如果由于某种原因我调用 log.DebugFormat()
时传递了一个需要大量计算的表达式(例如数据库查询),那该怎么办?是的,这是个坏主意,但只是为了强调,如果 ToString()
操作在字符串格式级别进行评估,则注释是正确的,否则不是。 - usr-local-ΕΨΗΕΛΩΝlogger.Debug($"username : {username} password : {password} server : {server}")
Debug
而不是使用DebugFormat
的缺点在于,即使日志级别更高,调用Debug
也将始终导致字符串被评估。当调用DebugFormat
时,仅在日志级别足够低时才会评估该字符串。因此,在性能是一个问题的应用程序中,您可能需要考虑使用DebugFormat
。 - Craiglogger.Debug(string.Format("username : {0} password : {1} server : {2}",
username, server, password))
string.Format
。为了避免字符串拼接,我给你点赞。 - spender