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
ConsoleLogger Control
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 452
Herkunft: Bamberg

Themenstarter:

ConsoleLogger Control

beantworten | zitieren | melden

Beschreibung:

Hi folks,
Hintergrund für die Entwicklung des eigenen Controls war dieser Thread. Ich habe es nicht (performant) hinbekommen, dass ich den Cursor ausschalte, in verschiedenen Farben loggen (was über Select geht) kann und dann auch noch Selectionen als Ganzes deaktivieren kann, denn beim Vergrößern solcher Consolen mittels Doppelklick wird dann immer Text selektiert, was total nervig ist, bzw. häßlich aussieht. Bei "meiner Lösung mit der RichTextBox" hatte ich zum Schluß bei sieben Ereignissen den Aufruf für die API-Function HideCaret drinnen und beim Mausmove-Ereignis innerhalb der RichTextBox hatte ich zeitweise 20 Prozent CPU-Auslastung und die Selections waren auch nicht ganz verschwunden und hin und wieder tauchte der Cursor immer noch auf. Also habe ich mich entschiedenen ein eigenes Control zu bauen. Ich benutze jetzt immer (vorher auch schon mit der RichTextBox) in meinen Projekten solche Consolen, weil ich diese Popup-Fenster einfach hasse und mit diesen Consolen ist sichergestellt, dass man z.B. bei Programmen, die auf Servers laufen, am z.B. nächsten Tag mal schnell in die Console schaut und nicht immer den Umweg über Popup-Fenster oder Logfiles gehen muss (oder nicht geht, weil man keine Fenster implementiert hat oder nicht gerade weiß, wo sich das Logfile befindet, bzw. nicht vorhanden ist ... auch habe ich oft mit Programmen zu tun, wo kein Mensch mehr weiß, was die überhaupt machen, ich bekomme dann immer nur zur Antwort, das es nicht mehr so geht wie immer .. und manchmal am Ende einer Operation ein Fenster mit dem Hinweis "Fertig !" erscheint ... LOL .. echt kein Witz, alles schon gehabt ...

OK, wie wird das nun benutzt,
die Console besteht aus einem WebBrowser Control, so ist sichergestellt, dass man auch hin und wieder mal HTML-Code (Bilder oder Tabellen ect.) loggen kann, bzw. auch formatierte Ausgaben durchführen kann (HTML-Style). Das Webbrowser Control habe ich public gemacht, so kann man eben damit machen was man will (Formulare, AJAX ect.).

Das loggen ist total simple. Control einfach wie gewohnt auf ein Formular ziehen und die Methode LogMessage aufrufen. Es gibt vier vordefinierte ConsoleLoggerConfig Objekte, die aber ignoriert oder überschrieben werden können - natürlich können auch eigene angelegt werden.

Hier mal ein Screenshot von der Testform für das Control ...

Schlagwörter: Console, Logger, ConsoleLogger
Attachments
private Nachricht | Beiträge des Benutzers
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 452
Herkunft: Bamberg

Themenstarter:

beantworten | zitieren | melden

Kurze Erklärungen zu den Properties (der Code ist ausführlichst dokumentiert)

Selection: kann aktiviert werden (inklusive Browser-Kontextmenu)
UTC Time: Zeit kann als UTC registriert werden, dann werden (wenn angegeben im Formatter) die Zeitangaben als UTC gelogged.
Timeout: Kleine Spielerei von mir. Der Text wird als Ticker geschrieben, und nicht als Ganzes (natürlich nur, wenn man das möchte), hier kann man den (JavaScript) Timeout einstellen
Chars pro Interval: Die Anzahl der darzustellenden Zeichen der Gesamtmessage pro Funktionsaufruf im JavaScript Intervall, wenn die Message gezeichnet wird. Will man also die Message sofort sehen (ohne Tickerfunktionalität), dann Timeout auf 1 und Chars / Interval auf 1000 (sollte reichen)
Log Pattern:: Wird kein Pattern angegeben, dann wird "nur" die Message gelogged.

In diesem Pattern sind widerum vier konstante Werte bekannt:
Datum Key ${date[(format)]}: Das Datum wird gelogged, existiert unmittelbar hinter dem Datum Key ${date} ein Ausdruck in runden Klammern, dann wird das Datum mit diesem Format gelogged, ansonsten HH:mm:ss
Type Key ${type}: Der Type name, innerhalb des Objektes ConsoleLoggerConfig definiert, hier z.B. INFO, WARNING, PROCESSING und ERROR
Source Key ${source}: Der Ursprung der Logmeldung
Message Key ${message} Die Logmeldung

Hier kann man natürlich "rumspielen". Die Keys sind nicht mandatory. Wie gesagt, wenn kein Pattern angegeben, wird nur die Message gelogged, wichtig ist aber, dass z.B. in einem Pattern schon die Message ${message} stehen sollte, denn z.B. das Pattern

${date} Bla blub bla würde nur folgendes loggen:

HH:mm:ss Bla blub bla

OK, zu guter letzt noch. Wie wird gelogged: Es gibt die überladenen Methoden LogMessage, welcher man immer die Nachricht und das ConsoleLoggerConfig Objekt übergeben muss. Dieses Objekt besteht lediglich aus dem Type (String) und der Schriftfarbe (Color).

Bei Fragen einfach an mich wenden.

Hier noch ein Screenshot, wie man die Konsole jetzt locker mit Doppelklick aufklappen kann ohne die störenden, bzw. häßlichen Textselektionen
Attachments
private Nachricht | Beiträge des Benutzers
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 452
Herkunft: Bamberg

Themenstarter:

beantworten | zitieren | melden

Hier noch einer mit "HTML-Spielerei" ...
Attachments
private Nachricht | Beiträge des Benutzers
mosspower
myCSharp.de - Member

Avatar #avatar-2662.jpg


Dabei seit:
Beiträge: 452
Herkunft: Bamberg

Themenstarter:

beantworten | zitieren | melden

Gegenwärtig ist die Console erst mal so, wie ich sie brauche, jedoch werde ich später folgende Funktionalitäten auch noch brauchen:

Freeze pane (wenn viel und häufig gelogged wird, dass man das Einfrieren kann und die Messages auch lesen, denn die Console springt standardmäßig immer ans Ende, nach einem Logvorgang)
Filterfunktionalität Filtern nach Type, Datum und Source
Kontenxtmenu Hier können dann diese Funktionalitäten ausgewählt werden + weitere, wie z.B. To Clipboard, select all ect.

OK, hier dann noch abschließend der Quellcode (mit 3.5 kompiliert, sollte aber ohne Probleme auch mit 2.0 kompiliert werden können)

Gruß
Attachments
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1.346

beantworten | zitieren | melden

Cooles Control

pdelvo
private Nachricht | Beiträge des Benutzers
hobofan
myCSharp.de - Member



Dabei seit:
Beiträge: 364

beantworten | zitieren | melden

da kann ich meine vorposter nur zustimmen sieht echt schick aus, werds demnächst vielleicht sogar brauch :-)
private Nachricht | Beiträge des Benutzers