Laden...

log4net

Erstellt von rockthecity vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.452 Views
R
rockthecity Themenstarter:in
297 Beiträge seit 2005
vor 18 Jahren
log4net

Hallo Forum,

habe noch eine Frage.

Ist es möglich für log4net mehrere Appender zu generieren.

Momentan benutze ich den UDP Appender , sollte das Netzwerk jedoch down sein
würde ich gerne auf den FileAppender zurückgreifen.

Gruß

rockthecity

Urlaubsorte suchen: http://www.tripedio.de

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo rockthecity,

ich kenne die genaue Funktionsweise von dem Tool jetzt nicht, deshalb kann ich hier auch total falsch liegen:

Ist es nicht möglich zu überprüfen, ob das Netz down ist, und daraufhin in einer If-Anweisung dementsprechenden Appender zu wählen?

So bräuchtest Du nicht wirklich 2 Appender, sondern nur entweder oder...

Gruß
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

R
rockthecity Themenstarter:in
297 Beiträge seit 2005
vor 18 Jahren

Prinzipiell ist es sicherlich machbar.

Ich dachte nur vielleicht kennt jemand einen pragmatischen Weg.

log4net ist ein logger wie der Name schon erahnen lässt.

Ich suche nun eine komfortable Lösung.

Bei deinem Vorschlag hätte ich eben nur entweder oder.

Dies ist sehr aufwendig da ich vor jedem Logging prüfen müsste welcher Appender zu nutzen ist.

Da meine Anwendung rund um die Uhr läuft wäre dies immenser Aufwand.

Trotzdem vielen Dank für die Mühe.

Gruß

rockthecity

Urlaubsorte suchen: http://www.tripedio.de

M
456 Beiträge seit 2004
vor 18 Jahren

Du könntest auch einen komplett neuen Appender schreiben, der einfach prüft, ob das Netzwerk down ist oder nicht und dann selektiv wählt in welchen Appender geschrieben wird. Der Vorteil ist, dass du deinen bisherigen Code praktisch nicht ändern musst. IMHO der kompfortabelste Weg.
Im Pseudo-Code (nicht log4net konform):


public class SelectiveUDPOrFileAppender : Appender
{
  UDPAppender udpAppender;
  FileAppender fileAppender;

  public override void Write(string str)
  {
    if(NetworkAvailable)
      udpAppender.Write(str);
    else
      fileAppender.Write(str);
  }
  ...
  private bool NetwortAvailable {...}
}

I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo zusammen,

ich bin sogar gleich davon ausgegangen, dass man log4net durch diesen Appender via einem Interface anspricht, so dass es egal ist, ob es ein File-Appender ist, oder ein Net-Appender.

Das spricht irgendwie nicht für gutes Design, oder irre ich mich da?

Gruß
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

R
rockthecity Themenstarter:in
297 Beiträge seit 2005
vor 18 Jahren
log4net

Macht man auch über ILog.

Also bei sieht es momentan so aus.

In meiner app.config ist die Config für den Appender enthalten.

In meinem Programm rufe ich log4net auf der in der AppConfig nach der Konfiguration sucht.

Und erhalte hiermit den Logger:


private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);


Urlaubsorte suchen: http://www.tripedio.de

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo rockthecity,

heißt das jetzt, dass Dein Problem gelöst ist?

Ich denke dann brauchst Du nur während der Initialisierungsphase eine If-Anweisung, die einmalig festlegt, ob File oder Net, danach werden eh nur die Interface-Methoden angesprochen, oder?

Gruß
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

R
rockthecity Themenstarter:in
297 Beiträge seit 2005
vor 18 Jahren

Nein immer noch nicht.

Ich denke das klappt auch nicht.

Das Problem ist ja das ich ca. 300 Loggings mache.
Mit meiner If-Anweisung lege ich ja nur entweder oder fest.

Was mache ich wenn das Netz nur ca 10 sek. down ist ?

Evtl. noch einen Eventhandler einsetzen der die connectivity prüft.
und dann umschaltet ?

Gruß

rockthecity

Urlaubsorte suchen: http://www.tripedio.de

R
rockthecity Themenstarter:in
297 Beiträge seit 2005
vor 18 Jahren

Hi habe was gefunden.
Für diejenigen die es interessiert.

Is it possible to direct log output to different appenders by level?

Yes it is. Setting the Threshold option of any appender extending AppenderSkeleton, (most log4net appenders extend AppenderSkeleton) will filter out all log events with a lower level than the value of the threshold option.

For example, setting the threshold of an appender to DEBUG will also allow INFO, WARN, ERROR and FATAL messages to log along with DEBUG messages. (DEBUG is the lowest level). This is usually acceptable as there is little use for DEBUG messages without the surrounding INFO, WARN, ERROR and FATAL messages. Similarly, setting the threshold of an appender to ERROR will filter out DEBUG, INFO and WARN messages but not ERROR or FATAL messages.

This policy usually best encapsulates what the user actually wants to do, as opposed to her mind-projected solution.

If you must filter events by exact level match, then you can attach a LevelMatchFilter to any appender to filter out logging events by exact level match.

Urlaubsorte suchen: http://www.tripedio.de