Conversation
- Add ExportParameter model with ExportFormat enum
- Add ExportCommand to NLogViewer for exporting filtered log entries
- Add ExportLogsCommand to MainViewModel with SaveFileDialog integration
- Add Logs -> Export menu item with automatic enable/disable based on tab selection
- Add localization resources for export menu items in all supported languages
- Export format: yyyy-MM-dd HH:mm:ss.ffff | LEVEL | LoggerName | Message
- Default filename: {TabHeader}-{Timestamp}.log
- Add support for pipe-separated log format (timestamp | level | logger | message) - Add multi-line message support with continuation line detection - Add ISO 8601 UTC timestamp formats with 'Z' suffix - Extend all tests to verify TimeStamp, LogLevel, LoggerName, and Message
Expose ScrollToEndCommand on NLogViewer, wire NLogViewer reference into LogTabViewModel via DataContext, and trigger scroll after adding log events when AutoScroll is enabled.
…get DP - Add ICacheTarget with Cache (IObservable<LogEventInfo>); CacheTarget implements it. - LogTabViewModel implements ICacheTarget, exposes Cache; remove NLogViewer and LogEventInfos. - NLogViewer: add CacheTarget dependency property; OnCacheTargetChanged calls StartListen(target). - StartListen(ICacheTarget?) accepts optional target; fallback to GetInstance(TargetName). - MainViewModel: remove scroll-to-end logic that referenced tab.NLogViewer.
Implement ReplaySubject in LogTabViewModel so events are held until NLogViewer subscribes. Bind NLogViewer via CacheTarget instead of ItemsSource. Push events via AddLogEvent from MainViewModel. Add System.Reactive to App project.
Remove ItemsSource dependency property and related handlers. Log events are supplied only via CacheTarget (CacheTargetProperty when set, else CacheTarget.GetInstance). Update comments to describe CacheTarget-based data source and simplify OnPauseChanged, StartListen, ClearCommand, and Loaded logic.
Replace ReplaySubject with Defer+Concat+Publish+RefCount so the first subscriber receives buffered events and later subscribers receive only events from subscription time. AddLogEvent fills a buffer until first connect, then routes to a live Subject. Thread-safe via lock.
… compatibility NLogViewer no longer requires a parent Window; uses Application.Current.Dispatcher or Dispatcher.CurrentDispatcher when Window.GetWindow returns null. Add TestCacheTarget (ICacheTarget test double) and WpfTestHelper.CreateViewerWithTestData/WaitForViewerEvents. Refactor NLogViewerFilterTests to use CreateViewerWithTestData so tests exercise the real cache subscription path.
…ch failures NLogViewerFilterTests passed individually but failed when run together because later tests used Application.Current.Dispatcher from the first test's (dead) STA thread. Use a single STA thread and WPF Application for all filter tests via WpfStaContextFixture and IClassFixture. Simplify WpfTestHelper (remove RunOnStaThread; use StartListen in CreateViewerWithTestData). Remove unused usings in test files.
Closed
8 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.