我正在寻找在UI应用程序中使用log4Net的一些指南。将高度赞赏这方面的所有指示。
与你可能想提到的其他人一样,我特别想知道的一件事是 - 哪种方法更好 - 放置多个日志语句或只是一个长日志。
例如
logger.Info("Server Name: " + serverName);
logger.Info("DB Name: " + dbName);
logger.Info("App version: " + appVersion);
etc
或者
logger.Info(string.Format("Server Name: {0}; DB Name: {1}; App version: {2}",
serverName, dbName, appVersion));
主要从性能的角度来看(而不是可读性)。
感谢。
答案 0 :(得分:3)
这实际上取决于您将拥有什么样的日志记录。我个人不喜欢多日志方法,因为它们可以根据您的appender和日志记录使用情况分开,但这是个人偏好。如果没有统一的令牌(线程ID或其他),可能很难跟踪日志中的相关内容。
至于时间安排,@ stuartd是对的;差异可以忽略不计;现在不要理会它,如果你以后遇到问题,请给你的代码计时;我非常肯定会比弹出日志更有趣。
但有一点:不要直接将字符串格式化为日志记录调用的参数。 log4net有一些*格式方法(DebugFormat
,ErrorFormat
等...)只有在记录消息时才会执行格式化,因此可以说效率更高。
log4net周围的一些包装器甚至添加了对日志记录字符串的延迟评估,以避免在它们无用的情况下浪费地评估参数,但这不是vanilla log4net。
答案 1 :(得分:1)
从性能的角度来看,单个日志事件肯定会在多个调用中具有某些优势,但多少取决于您登录的位置。例如,如果您使用的是AdoNetAppender then log calls are batched,那么应该几乎没有区别,但如果您使用的是FileAppender并从多个线程写入,则单个日志事件将需要较少的文件锁定,因此可能存在可衡量的差异。
然而,除非你是logging too much,否则表现应该不是问题 - 在你的例子中,差异几乎肯定是微不足道的。但是,如果您真的关心特定使用场景中的性能,则应该分析这两种方法。