Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
log4net
rockthecity
myCSharp.de - Member



Dabei seit:
Beiträge: 297

Themenstarter:

log4net

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4591
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

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!”
private Nachricht | Beiträge des Benutzers
rockthecity
myCSharp.de - Member



Dabei seit:
Beiträge: 297

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
maxE
myCSharp.de - Member



Dabei seit:
Beiträge: 456
Herkunft: Sachsen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4591
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

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!”
private Nachricht | Beiträge des Benutzers
rockthecity
myCSharp.de - Member



Dabei seit:
Beiträge: 297

Themenstarter:

log4net

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4591
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

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!”
private Nachricht | Beiträge des Benutzers
rockthecity
myCSharp.de - Member



Dabei seit:
Beiträge: 297

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
rockthecity
myCSharp.de - Member



Dabei seit:
Beiträge: 297

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers