使用log4net连接字符串

8
log4net日志记录器能否做到像这样的事情?
logger.Debug("username : {0} password : {1} server : {2}",username,server,password)

还是只剩下丑陋的"+"拼接选项了。


3
如果不支持,你总是可以退而使用 string.Format。为了避免字符串拼接,我给你点赞。 - spender
3个回答

14

你可以用两种方式实现

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)

5
请注意,如果当前的日志级别为Info或更高,则DebugFormat将避免执行任何字符串操作或ToString()调用的CPU成本。所有其他的字符串格式化方法都没有这种优化。 - Mike Asdf
并不完全正确。是的,DebugFormat 方法的第一行检查日志级别,并且如果较低则可能返回。但是 .NET 将始终在调用方法之前评估您传递的所有表达式。在上面的示例中,我仅传递对象引用,因此没问题。但是,如果由于某种原因我调用 log.DebugFormat() 时传递了一个需要大量计算的表达式(例如数据库查询),那该怎么办?是的,这是个坏主意,但只是为了强调,如果 ToString() 操作在字符串格式级别进行评估,则注释是正确的,否则不是。 - usr-local-ΕΨΗΕΛΩΝ

3
你也可以使用C# 6.0的新字符串插值功能:String Interpolation
logger.Debug($"username : {username} password : {password} server : {server}")

1
这可能需要一些时间,我的眼睛会流血不止,但最终这可能是最好的答案! - spender
这只是一个糟糕的例子,但在我的一些项目中,我们有很长的字符串,发现这比查找哪个变量对应哪个占位符更容易阅读。对我来说,拥有这个选项是一个加分项,而且Visual Studio的格式化比SO更好。 - Gabriel Mongeon
2
调用Debug而不是使用DebugFormat的缺点在于,即使日志级别更高,调用Debug也将始终导致字符串被评估。当调用DebugFormat时,仅在日志级别足够低时才会评估该字符串。因此,在性能是一个问题的应用程序中,您可能需要考虑使用DebugFormat - Craig

2
您可以像这样使用字符串格式:
logger.Debug(string.Format("username : {0} password : {1} server : {2}", 
                           username, server, password))

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