2009-03-08 17 views
2

EntLib kayıt bloğunun esası veya başka bir şekilde tartışılmadan, konfigürasyonunu çalışma zamanında değiştirebileceğim bir yol var mı? Örneğin, Genel olayları düz bir dosyaya ve olay günlüğüne yönelik Kritik olaylara günlüğe kaydedilecek şekilde yapılandırılmış bir bloğum var. Örneğin;
Uygulamamı yeniden başlatmadan Genel olayları konsola vb. Günlüğe kaydetmek için değiştirmenin bir yolu var mı?Çalışma Kitaplığı Günlüğü blokunun yapılandırmasını çalışma zamanında değiştirebilir miyim?

Açıklama: Uzun süredir çalışan bir sunucu uygulaması yazıyorum. Uygulamayı yeniden başlatmadan tanılama/sorun giderme amacıyla çeşitli günlük gruplarının ayrıntılarını/çıktılarını geçici olarak artırabilmek istiyorum. Yeniden başlatma, üretimde "site indirme" anlamına geleceği için bir seçenek değildir.

cevap

1

ConfigurationFileMap dosyasını açıp kaydedicinin yapılandırmasını değiştirebileceğinizi biliyorum. Bununla birlikte, eğer sorun, yapılandırma dosyasını kaydetmek uygulamayı sıfırlar ve varsayılan olarak geri ayarlamanız gerektiğinden, bu sorunu istediğiniz şekilde çözecekse emin değilim. Bu sadece bir konsolu bağlamak için çok iş var.

Günlük bloğu bir sağlayıcı modeli kullandığından, çalışma zamanında ekleyebilmeniz gerekir, ancak bunun nasıl yapılacağından emin değilim. Ancak, EntLib için tam kaynağa sahipsiniz, bunun için kod yığınını kullanmanın büyük bir iş parçası olmaması gerekir. Hatta kodlamak için kodu geri yansıtmak zorunda bile değilsiniz.

Amacınız bir uygulamayı gerçek zamanlı olarak izlemek olduğunu mu sanıyorum?

+0

updated question - 24/7 sunucu uygulaması yazıyorum ve –

+0

yeniden başlatmadan sorun giderme amacıyla çeşitli alanlarda günlüğe kaydetmeyi "yeniden başlatmak istiyorum" Bu, yeniden başlayacağı gibi, yapılandırma yeniden yazma ile olmazdı. Durum sunucusu için SQL kullanıyorsanız, büyük bir anlaşma değil, ama bir isteğin ortasında insanları mırıldanabilir.Kod tabanına bakacağım veya orada ekleyebileceğiniz gibi bir günlüğü windows hizmeti oluşturmayı düşünürdüm. –

5

Sadece şu adımları izleyin aslında başarmak oldukça kolaydır:

Yeri ayrı bir dosya

<configuration> 
    <configSections> 
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    </configSections> 
    <enterpriseLibrary.ConfigurationSource selectedSource="EntLib Config"> 
    <sources> 
     <add name="EntLig Config" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
      filePath="EntLib.config" /> 
    </sources> 
    </enterpriseLibrary.ConfigurationSource> 
</configuration> 

Kurumsal Kütüphane yapılandırma günlüğü filtreyi ekleyin. Kayıt girişlerini filtrelemek için günlük girişi önceliklerini veya kategorilerini kullanabilirsiniz, böylece kodunuzda önceliği veya kategoriyi buna göre ayarlamanız gerekir. Örneğin, 1 gibi çok önemli mesajlar ve düşük öncelikli numarası vermek istiyorum, ve daha ayrıntılı mesajı göz ardı edilir zamanında Enterprise Library yapılandırmasında yapılan 10.

<configuration> 
    ... 
    <loggingConfiguration name="Logging Application Block" tracingEnabled="true" 
    defaultCategory="General" logWarningsWhenNoCategoriesMatch="true"> 
    ... 
    <logFilters> 
     <add minimumPriority="1" maximumPriority="10" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     name="Priority Filter" /> 
    ... 
    </loggingConfiguration> 
</configuration> 

tüm değişiklikler olabilir - yapılan değişikliklerin dışında Günlük Uygulama Bloğu. MSDN 'de şu gönderiye bakın: Updating Configuration Settings at Run-time

Filtre değerlerini değiştirmek için basit bir yardımcı yöntem uyguladım: Daha ayrıntılı iletiler istediğimde, bu girişlerin maksimum öncelik değerini artırarak kaydedilmesine izin veriyorum. Ben sadece giriş için istisnalar ya da diğer çok önemli mesajlar istediğinizde Aynı şekilde, ben web.config olarak hizmet yenilemeden 1.

var path = System.IO.Path.Combine(Environment.CurrentDirectory, "EntLib.config"); 
var xd = XDocument.Load(path); 

var x = (from z in xd.Root.Elements("loggingConfiguration").Elements("logFilters").Elements() where (z.Attribute("name").Value == "Priority Filter") select z).SingleOrDefault(); 
x.Attribute("minimumPriority").Value = 1; // Change this value... 
x.Attribute("maximumPriority").Value = 5; // ... and this one to specify the range you want to log. 

xd.Save(path); 

Bu Enterprise Library Günlüğü işlevselliği değişecek, 0 öncelik aralığını ayarlamak asla dokunulmaz. Sadece dezavantaj, günlük girişlerini önceliklendirmek/kategorize etmek için bir tür konvansiyon kullanmanız gerektiğidir.

+1

Siz buna oldukça kolay diyorsunuz? Başka bir con, web uygulamasında filePath içinde tam yol yazmanız ve göreceli yolun çalışmadığıdır. EntLib'in Microsoft'un ürünü olduğuna inanamıyorum. –

İlgili konular