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üßé
Es gibt log4net LogViewer: Google-Suche nach lo4net read logs
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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:
Wo ist da jetzt das technische Problem?
Erstelle einen Appender der die Logdaten im Speicher hält und zeige diese im ListView an.
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.");
}
}