ログの記録は、ログを記録しないよりも遅くなります。ロギングはパフォーマンスに関するものではなく、信頼性とリカバリに関するものです。最高のログ記録のフレームワークは宗教的に使用するもので、最悪のものは使用しないものです。
私たちのアプリケーションではlog4netを使用していますが、苦情はありません。私が微調整したいことがありますか?確かに。しかし、私たちは伐採事業に携わっていないので、クライアント用のアプリケーションを作成するので、信頼性の高いロギングシステムが必要になり、log4netが適合します。
このように、私たちはデバッグログを確認するためにデバッグログをラップします。そしてはコアの中でのみとなりました。典型的なif (log.isDebugEnabled)
チェックを超えて、各ifステートメントの独自の静的変数チェックで追加されました。私たちは本当に我々が
#region Log4Net
const string c_EnableDebugLogging = "com.techsoftinc.BusinessObjectsCore.EnableDebugLogging";
static readonly bool _EnableDebugLogging = Convert.ToBoolean(ConfigurationManager.AppSettings[c_EnableDebugLogging] ?? "false");
static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
//Do we support ultrafast logging? See What is REALLY the FASTEST way of (not) logging? in http://logging.apache.org/log4net/release/faq.html
static bool debugLogging
{
get { return _EnableDebugLogging && log.IsDebugEnabled; }
}
#endregion
を持っていると我々はデバッグしたいときに、我々は(例えば)持っている(私たちのORMまたは他のインフラストラクチャの作品のほとんどの部分)の性能を気モジュールの上部に
if (debugLogging)
log.DebugFormat("Executing sql: {0}", sql);
_EnableDebugLoggingがfalseの場合、JITはdebugLogging関数をfalse
に折りたたんで、if (debugLogging)
ステートメント全体を削除します。 JITは、必要がなければ、そのままデバッグロギングをフロアに落としています。
* reliable ==は、私たちが遭遇したすべての状況でうまく機能します。信頼できるというのは、コンピュータサイエンスの意味で信頼できるものではありません。
男、それは本当に素晴らしいです。ありがとう! –