Log4net için bir paket oluşturdum (NLog'un lehine düşebilirim; henüz karar vermedim) ve oturum açtıkları mesajların yapısını çağırmasıyla ilgili bir fikir vermesini sağlarım. Örneğin:C# günlüğe kaydetme için, çağrı yığını derinliğini minimum yük ile nasıl edinebilirim?
2011-04-03 00:20:30,271 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.ProcessAdminCommand - ProcStart - User Info Repository
2011-04-03 00:20:30,271 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.StartOneProcess - User Info Repository
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.SetProcessStatus - Process = User Info Repository, status = ProcStarting
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.SendProcessStatusInfo
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MhlAdminLayer.SendToAllAdministrators - ProcessTable
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MReflection.CopyToBinary
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MReflection.CopyToBinary - False
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MhlBasicLayer.SendToAllConnections - 228 - True - False
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MmlNonThreaded.SendObject - 228
2011-04-03 00:20:30,411 [CT] DEBUG - Merlinia.CommonClasses.MllTcpSocket.SendMessage - 228 - True
2011-04-03 00:20:32,174 [10] DEBUG - Merlinia.CommonClasses.MReflection.CreateFromBinary
2011-04-03 00:20:32,174 [10] DEBUG - Merlinia.CommonClasses.MReflection.CopyFromBinary - Bytes = 71
2011-04-03 00:20:32,174 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.MessagingCallback - User Info Repository - ProcessInfoAndRequests
2011-04-03 00:20:32,174 [CT] DEBUG - Merlinia.ProcessManager.CentralThread.ProcessProcessInfoAndRequests - User Info Repository
Bu System.Diagnostics.StackTrace kullanarak ve sayma StackFrames yapmak.
Şimdi soru şu: Bunu yapmanın daha verimli bir yolu var mı? Sadece (göreceli) çağrı yığını derinliğini belirlemeye ihtiyacım var, yani, mevcut derinlik artı veya eksi, günlüğe kaydetme sargımın çağrıldığı son kez. (Aslında StackFrame nesnelerini kullanmadığımı unutmayın - aksi halde yöntem isimlerini alırım.)
Arama yığını derinliğini veya yığın kullanımını sorgulamanın basit ve yüksek performanslı bir yolunu umuyorum.
Cevabınız için teşekkür ederiz. Yanlış olabilir, ancak StackFrame nesnesinin tümünün de oluşturulduğu bir StackTrace nesnesi oluşturduğunuzda farz ediyorum. Bunun böyle olmadığını mı söylüyorsun? – RenniePet
yeni StackFrame() nesnesi, onu kullanmıyorsanız o kadar pahalı değil, ancak gerçekten en iyi performansa ihtiyacınız varsa, bazı Twisted Reflection.Emit öğelerini okuyun: http://ayende.com/blog/3879/reducing- -kullanıma-a-stack-trace –
Vay, etkilendim. Benim yeteneklerim gibi hissetmek de, neler yaptığınızı anlamaya yetmiyor. Daha fazla zamanım olduğunda daha sonra analiz etmeye ve anlamaya çalışacağım. Ama "Func