2011-09-13 19 views
5

'de çalışıyor. Uygulamamda NLog aracılığıyla oturum açma işlemi yapıyorum. Sadece bir makinede sahip olduğum tuhaf bir sorunu teşhis etmek için bazı günlükleri toplamaya çalışıyorum. Benim NLog.Config ben şu yapılandırmaya sahip:NLog, ClickOnce ortamında oturum açma gibi görünmüyor, ancak

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

    <targets> 
    <target name="logfile" xsi:type="File" fileName="${specialfolder:dir=PollingLogs:file=log.txt:folder=MyDocuments}" /> 
    </targets> 

    <rules> 
    <logger name="*" minlevel="Debug" writeTo="logfile" /> 
    </rules> 
</nlog> 

Ben tüm günlük doğru olup biten, belgelerim klasöründe oluşturulan bir log.txt dosyayı alıyorum benim geliştirme makinede çalıştırın. Ancak, uygulamayı ClickOnce ile dağıttığımda hiçbir log.txt dosyası oluşturulmuyor (en azından ben bulabilirim). Hata oluşmuyor ve uygulamanız normal çalışıyor, ancak hiçbir şey olmuyor.

Bu sorunun nasıl hata ayıklandığına bile şaşırdım. NLog'un bir tıklama ortamında doğru çalışmasına yardımcı olmak için paylaşabilecekleri herhangi bir fikir var mı?

Referans olarak, projemdeki NLog referansı yerel kopyalanacak şekilde ayarlanmıştır.

+0

Bir uygulama başladığında her zaman günlüğüne yazıyorum ve günlüğün başarısız olması durumunda tamamen başarısız olmasını sağlarım. Bu şekilde, uygulamayı ne zaman dağıttığımı (web veya masaüstü), bu günlüğe kaydetmenin çalıştığını ve ihtiyacım olduğunda orada olacağını biliyorum. – DOK

+0

NLog'un başarılı olup olmadığını nasıl anlarsınız? – KallDrexx

+0

Nlog yapılandırma dosyasına [internalLogFile = "nlog-errors.log"] (http://nlog-project.org/wiki/Internal_logging) eklemeyi deneyebilirsiniz, ve eğer logonun kendisi oturum açmaya çalışırken bir istisna alırsa – BrandonAGr

cevap

2

Bu kullanımda hata ayıklamak için Sysinternal ProcessMon (ücretsiz). Bu bir süreç yapılmış dosyalar çalıştı kere diğer şeyler/arasındadır gösterebilir ... Ben ApplicationData veya CommonApplicationData veya Environment.SpecialFolder den LocalApplicationData değil MyDocuments kullanarak öneriyoruz giriş bu tür için

...

+2

ProcMon iyi olurdu, bu günlük dosyasına günlüğe kaydetme hatası kaydeder, ilk olarak olmasını beklediğiniz nlog yapılandırma dosyasını okuduğunuzdan emin olmak için kontrol edebilirsiniz. Belki clicklogce uygulaması ile nlog config dosyası konuşlandırılmamış mı? – BrandonAGr

0

Bu konuyu bugün üzerinde çalıştığım bir projeyle vurdum. Eğer oradan çalıştırdığınızda gayet böylece

NLog.config dosya

Yapınız dizinlere kopyalanan oluyor, ancak ClickOnce montajcılar değil yazılım yüklendiğinde NLog.config dosyasını dağıtma vardır.

Bu görüyorsanız davranış açıklıyor: yüklü kopyasından çalıştırdığınızda, sadece herhangi bir günlük yapılandırmasını yoktur. exe.config dosya ClickOnce tarafından dağıtılan olsun çünkü

Ben şimdiye kadar bulduğum tek çözüm, sizin app.config dosyaya günlük config birleştirmek - ı NLog.config eklemeye çalışırken neşe olmadı yükleyiciye.

4

Bunun biraz geç olduğunu biliyorum ancak başka bir soruyu yanıtlamasına rağmen burada açıklanan başka bir çözüm var: Configure log4net or NLog with XML from code .

Ben KallDrexx tarafından açıklanan aynı problem vardı. içinde,

public static XmlLoggingConfiguration SetNlogConfiguration() 
    { 
     var sr = new StringReader(NlogXmlConfigString1()); 
     var xr = XmlReader.Create(sr); 
     var config = new XmlLoggingConfiguration(xr, null); 
     return config; 
    } 

ayrı yöntem sadece xml dize döndürür: Öyle bir metot yapılandırmasını dönmek sahip bir NLogHelper sınıfını yarattı (aynı çözümde birden fazla proje) hakkında yüzen birden NLog yapılandırma dosyaları ile mutlu değilim davam: bu ürün l gibi refactored edilebilir Açıkçası

NLog.LogManager.Configuration = NlogHelper.Helper.SetNlogConfiguration(); 

:

private static string NlogXmlConfigString1() 
    { 
     return @"<nlog xmlns='http://www.nlog-project.org/schemas/NLog.xsd\' 
         xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance\'> 
        <targets> 
         <target name='logfile' xsi:type='File' fileName='${specialfolder:file=My_Logger.txt:folder=Desktop}' /> 
        </targets> 

        <rules> 
        <logger name='*' minlevel='Info' writeTo='logfile' /> 
        </rules> 
       </nlog>"; 
    } 

Son olarak, sadece ilgili sınıf oluşturucu yapılandırmasını ayarlamak og dosya adı gerekirse parametreler olarak iletilebilir. Yapılandırma xml, yapılandırmanızın ne olduğu ile değiştirilebilir. Ayrıca kolayca çalışma anında seçilir birden çok yapılandırma belirtme imkanı sunmak gibi görünüyor.

Bunu fark ediyorum çünkü kodun içinde ve dağıtım sırasında NLog yapılandırması üzerinde daha fazla denetim sağladığını görüyorum.

5

ClickOnce yüklüyse, NLog.config programınıza kopyalanmayacağı zaman bu sorunun cevabını buldum.

You NLog.config dosyayı seçmek gerekir senin ProjectSolution Explorer kullanarak ve aşağıdaki gibi onun Properties ayarlayın:

Eylem oluştur: İçerik

Kopya Output Directory için: Kopyala hep

Şimdi ClickOnce kullanarak konuşlandırdığınızda, dosyalar da kopyalanmalıdır! :)