Avatar billede FarmerHE Nybegynder
22. marts 2010 - 11:24 Der er 6 kommentarer

Log4Net problem

Hej

Er der nogen af jer der har et kendskab til Log4Net? Problemet er at jeg har 2 appenders der skriver til hver sin fil. Det er som sådanne fint nok og virker også okay. MEN når den har skrevet til en fil går der et tilfældigt tidsrum inden den kan skrive til den anden fil igen. Nogen der har en god ide til hvad det er der gør dette? Filen er fysisk låst så der ikke kan ændres i den men burde aldrig blive låst.

Jeg har 2 appenders med forskellige navne og starten af der hvor der låses lyder

ILog log = LogManager.GetLogger("Articles");
lock (log) {

Samt

ILog log = LogManager.GetLogger("Prices");
lock (log) {

Ingen af dem burde vel låse mere end en fil?

Mine appenders ser ud på følgende måde.

<logger name="Prices">
      <level value="INFO" />
     
      <param name="Threshold" value="INFO"/>

      <appender-ref ref="Prices1" />
    </logger>

    <logger name="Articles">
      <level value="INFO" />

      <param name="Threshold" value="INFO"/>

      <appender-ref ref="Articles1" />
    </logger>

<appender name="Prices1" type="log4net.Appender.RollingFileAppender">
      <maximumFileSize value="10MB" />
      <maxSizeRollBackups value="25" />
      <param name="File" value="logPrices.txt" />
            <param name="AppendToFile" value="true" />
            <rollingStyle value="Size" />   
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} - %m%n" />
            </layout>
        </appender>

    <appender name="Articles1" type="log4net.Appender.RollingFileAppender">
      <maximumFileSize value="10MB" />
      <maxSizeRollBackups value="10" />
      <param name="File" value="logArticles.txt" />
      <param name="AppendToFile" value="true" />
      <rollingStyle value="Size" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} - %m%n" />
      </layout>
    </appender>

Mvh
Simon
Avatar billede janus_007 Nybegynder
22. marts 2010 - 12:29 #1
Jeg kender ikke lige svaret, men Log4Net er forældet og ikke længere supporteret.
Der har altid været problemer med Log4Net ved threading og bla. det du nævner med locked files mv.

Tag et kig på http://nlog-project.org/ istedet, Log4Net er lige til at udskifte :)
Avatar billede FarmerHE Nybegynder
22. marts 2010 - 13:22 #2
Det undre mig ikke men er ikke mig der har truffet valget om log4net det er det der nu engang er brugt i det system jeg har fået smidt i nakken at gøre bedre.

Jeg tager et kig på det andet i stedet så må vi se om jeg kan løse problemet på den ene eller anden måde.

Mvh
HE
Avatar billede FarmerHE Nybegynder
22. marts 2010 - 15:39 #3
Nu har jeg kigget på den anden og fået den til at virke til at skrive til consol

Jeg kan dog ikke få den til at skrive til en fil min config fil indeholder følgende.

<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="console" xsi:type="ColoredConsole" layout="${message}" errorStream="true">
      <highlight-row condition="level isLess LogLevel.Error" foregroundColor="NoChange"/>
    </target>
    <target xsi:type="File" name="FileWriter" fileName="Log.txt"/>
  </targets>
  <rules>
    <logger name="*" writeTo="console,FileWriter"/>
  </rules>
  </nlog>
</configuration>

Nogen der let lige kan se hvad fejlen er siden den ikke vil skrive til en fil?

På forhånd tak

Mvh
HE
Avatar billede arne_v Ekspert
23. marts 2010 - 01:17 #4
log4net er ikke mere usupporteret end det altid har været. Det er et open source projekt og der er som sådan ikke nogen support. Men projektet er stadig et regulært Apache projekt og det vedligeholdes (bug fixes, opdatering af build scripts når der kommer ny .NET/VS version).
Avatar billede arne_v Ekspert
23. marts 2010 - 01:22 #5
Jeg er ikke helt klar over hvad "MEN når den har skrevet til en fil går der et tilfældigt tidsrum inden den kan skrive til den anden fil igen" egentligt betyder.

Men hvis jeg skulle gætte, så vil jeg tro, at det er bufferingen af log records, som får det til at se ud som om der bliver skrevet ujævnt.

Bufferingen kan slåes fra med en appender attribut:

<immediateFlush value="true" />

Med hensyn til "Filen er fysisk låst så der ikke kan ændres i den men burde aldrig blive låst", så er det dokumenteret funktionalitet at filen er låst mens den bruges.

Det kan imidlertid ændres ved en anden appender attribut:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />


Bemærk at begge attributter har en negativ indflydelse på performance.
Avatar billede FarmerHE Nybegynder
23. marts 2010 - 07:28 #6
Arne det har jeg prøvet en 4-5 gange inden jeg skrev her... jeg har fundet Google ;)

og der er ikke tale om at det ser ud til der bliver skrevet ujævnt der er slet og ret tale om at filen bliver låst så jeg ikke kan ændre i den hverken via notepad eller noget andet.

Så kan vi sige nok så meget vi vil men når log4net kan låse en fil den appender jeg bruger ikke har adgang til så er det ikke noget jeg har lyst til at bruge så sker der ting inde bagved i log4net.dll som kan være kilde til der opstår fejl fra tid til anden. Der er tale om noget der bare SKAL virke og ellers er der nogen der råber højt så skal log systemet ikke være kilde til fejl. ;)

Der ud over har jeg løst min problemstilling fra før også.

Mvh
HE
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester