kittyfisto / tailviewer Goto Github PK
View Code? Open in Web Editor NEWOpen source log file viewer
Home Page: https://kittyfisto.github.io/Tailviewer/
License: MIT License
Open source log file viewer
Home Page: https://kittyfisto.github.io/Tailviewer/
License: MIT License
Currently there's no visual indication when log entries of a particular data source are NOT displayed
in a merged view because they don't have a timestamp associated with them.
The total amount of skipped log lines should be displayed in the bottom bar of the log viewer (e.g. Lines: x of y, z skipped) as well as the amount per data source in the data source tree.
This requires a change to the tile of a data source so that the # of skipped lines can be displayed, as well as the fact that they ARE being skipped (e.g. maybe the tile should be accompanied with a warning of some sorts).
Hovering over the warning shall display a tooltip with a more detailed explanation of what's going on.
When filtering the log file, only lines matching the filter will be displayed, not log entries. The former is desired, however.
Whether or not a line belongs to the previous entry could be determined by whether or not it starts the prevalent header.
A progress bar should be displayed in the "data sources" panel when a file is being read or when it's being filtered, so the user actually knows that the view doesn't display the final state of the data source, but only a subset of it.
Currently a file handle is held open until the file is closed by the user or until the app shuts down.
This causes problems with log4net's rolling file appended which doesn't move files that are opened by other apps.
Additionally the user is unable to move files being viewed by tailbiewer.
Some logs may contain empty lines between log entries.
It should be possible to easily hide those newlines so that only lines that contain non whitespace characters are displayed.
Currently, log files are displayed "as is", similar to a text editor in read-only mode.
A second display option should be added, in case the structure of the file can be identified automatically (or supplied by the user) to display the log file in a table.
The table shall feature a list of column headers with appropriate names either taken from the log itself (for example CSV header, ETW manifest, etc...) or supplied by the user (log4net pattern).
Each row in the table shall display one log entry (that may consist of multiple lines).
The log table shall allow the user to easily toggle whether or not a certain column is visible.
Add an "update available" notification (could check once per day) that notifies users that a new version is available.
This should be disabled by default, but the user should be queried with a non-modal dialog if this feature should be enabled (e.g. a non-intrusive bar from the bottom/top).
Currently, the user doesn't see when / if a file was modified, unless he opens it.
This information should be shown in the "Data Sources" panel.
Add a system test project that tests:
Currently, log files are read completely into memory which requires about 2x their size. This isn't practical for files that are GB in size.
Therefore a solution shall be implement so that:
a) Memory consumption is fixed to a constant upper limit, (mostly) independent of the number of files that are opened
b) Files should be streamed into memory on-demand, but not held in memory all the time (unless the aforementioned buffer allows it)
c) The implementation must perform well with filtered and merged log files (both often violate the locality principle and therefore a simple buffer for a block in one source file won't do)
Updates should be installed automatically (see spotify) when a new version is available.
New versions may only be downloaded via a secure connection (e.g. using TLS) and the feature should be able to work in corporate environments (e.g. querying the user for his username/password).
This feature shall be disabled by default, but similar to #24 a notification bar should appear for the first time, asking the user on whether or not to enable this feature.
When displaying the log entries of an entire group (e.g. multiple data sources) then a toggle button to eliminate duplicate log entries should be presented.
Two entries are considered duplicates if they represent the exact same message.
The log level that's on the left-most position should be the ONLY level of a log entry (currently a log entry can have multple levels). Match the exact string (uppercase only):
FATAL, ERROR, WARN, INFO, DEBUG and TRACE
It should be relatively easy (i.e. one click) to export the current data source (including all currently applied filters) into a text file for further processing / sharing / etc...
Creator, license, download page, etc.. are missing and shall be displayed somewhere.
I want to add / modify / remove custom quick filters and enable/disable them similar to the "levels panel" on the top of the screen.
Quick filters would be stored for the entire application, whether or not a filter is selected is stored with the particular file.
There are log files which don't store "absolute" timestamps, but those that start:
A user should have the option to specify this "offset" per data source.
Several sane options should be made available by default (e.g. use the file's creation timestamp as the offset, or the file's last modified timestamp).
It should be possible to toggle between displaying an absolute timestamp or a relative one, against the first timestamp in the log file (obviously only when a timestamp is present).
Currently multiple lines often a single entry until one line contains one of the supported levels (error, warn, info, etc...).
This is problematic when viewing files that don't use log4net levels at all.
A toggle button shall be introduced that allows the user to toggle this setting.
If possible, an automatism shall be implemented that decides for a new file if said value shall be set to multiline or single line.
Currently, both the selected line as well as the current position of the log viewer are not preserved when:
a) A tab is switched
b) The tailviewer is restarted
Currently both selection and the viewed region is lost as soon as the current filter (level, filter, quickfilter).
This makes filtering a bit cumbersome, especially when the filter is changed in a way that doesn't affect the outcome of the log file. Obviously filtering shall only be performed when the filter is structurally different.
The different scenarios are as follows:
Special attention needs to be paid to how "follow tail" plays a role as well (e.g. There might never be a "the source is fully filtered).
There should be a changelog that let's users know which new features have been introduced as well as which bugs have been fixed. It could be placed in the about page, but maybe there's a better solution.
Ideally, the most recent change (or maybe the change since the last update) should be displayed somewhere in the application so that it's visible at first sight, but NOT intrusive enough as to annoy the user. Maybe to the right hand side, next to quick filters.
For the most serious (maybe configurable?) log entries, a marker shall be displayed on the timeline. This can only be done for log entries which have a timestamp, obviously.
Clicking on a marker shall select said log entry and also bring it to view.
Currently, the level (e.g. debug, info, warn) toggle buttons display the total amount of log lines that could be displayed, depending on currently selected filters.
This seems counter-intuitive and could be subject to change. Maybe both counts should be displayed next to each other? Maybe only the currently displayed amount?
Add heuristic that is able to detect the "type" of a data source, especially if its a comma separated (or use a different separator like tab, pipe, etc...) one.
The heuristic shall take into account both file extension and file content (a CSV file doesn't need to end with .csv). The result of this heuristic shall be prominently displayed in the data source tree and then be taken into account on whether or not allowing a tabular display of data.
Steps to reproduce:
Open a file containing multiple lines
Set a filter that causes some lines to disappear
Arrow down doesn't always work (the selected line won't move at all)
The current scroll viewer is ugly and shall be replaced by a new, simply, flat design, e.g. similar to GitHub for windows.
Currently a simple virtualized ListView is used to display the control, but it requires an expansion of the entire data set, e.g. 1M rows require 1M view models.
Create a custom control that works directly with the ILogFileListener and ILogFile interface which queries the log file for the currently visible region (e.g. ditch the view model entirely).
Currently, a tab consumes the same width as a space. This should be changed to 4 by default.
On top of that, the amount of space consumed by a tab shall be configurable by the user.
This shall be configurable via the settings page.
The shortcuts ctrl+tab and ctrl+shift+tab should be usable to select the next / previous data source.
The timeline of a grouped data source shall display the sub-lifetimes of at least a view data sources so that the user get's a grasp of how they overlap, if at all.
The display could be color coded and given the limited amount of space the user could possibly select which data sources' lifetimes to display with a multi toggle button or similar.
The toggle button must not appear when no selection needs to be made (e.g. there's enough space to display all data sources lifetimes at once).
Filtering by time, e.g.
Should be possible and reached with 2 clicks max, possibly via a popup next to the quick search in the top right.
Entering the values should be easy (and not cumbersome), possible ideas:
The toggle to enable/disable whether or not the main window is always on top should be reached very quickly, e.g. it should take no more than 3 clicks to do so.
Similar to filters: Counters shall be user defined (exactly like a filter), but instead of simply displaying a filtered list of log events, the number of matching filters shall be displayed next to a user defined caption.
Example output:
Application Crashes: 15
# of files opened: 320
Configuration:
The user shall be able to define the caption, filter, foreground color and font size.
Add a button (little x) that clears the string entered into the filter box (only visible when something has been entered)
Comparing multiple log files can be tricky if they were recorded on different devies and thus the user should be able to easily select the offset between the clocks of 2 or more log files.
This could be done by simply specifying which two log entries are related, establishing the offset automatically, instead of manually entering 1 hours, 12 minutes.
There seems to be a bug that causes the same line to be displayed multiple times (in different rows).
Fix it.
Fatal, Error should be red
Warning should be yellow
Info should be light blue
Debug?
The entire entry (and not just the matching line) shall be colored.
Currently, enabling/disabling all levels requires many clicks - it would be easier with a dedicated toggle for this.
Currently the content of only a single line is being copied to the clipboard, even when multiple lines are selected (e.g. ctrl|shift click or ctrl+a). The content of all selected lines shall be copied to the clipboard instead.
The user shall be able to configure the color used for log levels (which are hardcoded ATM) via a color picker.
The colors shall be stored application wide and determine
See title.
Whenever the view of the currently selected data source doesn't display any log lines, an explanation should be written (prominent size):
It should be possible to group multiple files (e.g. via drag 'n drop in the data sources panel).
The group itself should receive a view similar to the view of one log file, but would consists of entries of all logfiles, sorted by time. This can only work if all log-files within the group have a timestamp column (which means that a log file without timestamps can't be grouped with one that has them).
The grouped view should be filterable, just like the view of an individual file.
A context menu for data sources should be introduced which allows the user to open the default file explorer (windows explorer, total commander, etc..) with the folder containing the file of the data source.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.