Laden...

log4net in Verbindung mit ListView?

Erstellt von Bunnychecker vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.953 Views
B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren
log4net in Verbindung mit ListView?

Hallo.

Ich möchte gerne meine Logs in einem WPF ListView Control darstellen wollen. Da dies wahrscheinlich nicht aus der Luft gegriffen ist, würde mich interessieren, ob es da bereits vorgefertigte Lösungen gibt?

Liebe Grüßé

16.806 Beiträge seit 2008
vor 11 Jahren

Es gibt log4net LogViewer: Google-Suche nach lo4net read logs

  • sogar mit Source Code...
B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren

Dank dir, den hatte ich schon gefunden, aber dieser Viewer ist ja eigentlich dafür gedacht starre XML Datei anzuzeigen. Mir wäre es aber wichtiger den aktuellen Log des Programmablaufes darzustellen, wie das in diversen Programmen realisiert ist z.B. im Newsleecher auf dem Bild auf der rechten Seite:

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren
F
10.010 Beiträge seit 2004
vor 11 Jahren

Wo ist da jetzt das technische Problem?

Erstelle einen Appender der die Logdaten im Speicher hält und zeige diese im ListView an.

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren

Kannst du etwas genauer erklären, wie das funktioniert?

1.378 Beiträge seit 2006
vor 11 Jahren

Wie wärs mit ein wenig Eigeninitiative? Creating a custum log4net Appender

Lg, XXX

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren

Ich war mir nicht ganz sicher, ob man dafür explizit einen eigenen Appender schreiben muss oder ob es vielleicht auch ein MemoryAppender bzw. ein EventLogAppender tut.

Danke für deinen Link.

Edit:

Ich verstehe das Problem nicht. Sobald ich eine LogMessage schreiben will, springt mein Programm richtigerweise in die Methode Append, aber die _listView == null obwohl ich sie zuvor gesetzt habe?

    public class ListViewAppender : AppenderSkeleton
    {
        private ListView _listView;

        public ListViewAppender()
            : base()
        {

        }

        public ListViewAppender(ListView listview)
            : base()
        {
            _listView = listview;
        }

        private delegate void UpdateControlDelegate(LoggingEvent loggingEvent);

        private void UpdateControl(LoggingEvent loggingEvent)
        {
           // ...
        }

        protected override void Append(LoggingEvent LoggingEvent)
        {
            if (!_listView.Dispatcher.CheckAccess())// _listView == null
                _listView.Dispatcher.Invoke(new UpdateControlDelegate(UpdateControl), new object[] { LoggingEvent });
            else
                UpdateControl(LoggingEvent);
        }


<log4net debug="true">
  <appender name="ListViewAppender" type="WpfApplication2.ListViewAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>

  <root>
    <level value="ALL"/>
    <appender-ref ref="ListViewAppender" />
  </root>
</log4net>


    public partial class MainWindow : Window
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(MainWindow));

        public MainWindow()
        {
            InitializeComponent();

            ListViewAppender listViewAppender = new ListViewAppender(listView);
            
            log.Error("Error.");
        }
    }