Coder Social home page Coder Social logo

tailviewer's People

Contributors

dependabot[bot] avatar kittyfisto avatar oleg-abr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tailviewer's Issues

Add Changelog

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.

Define how selection and viewed section are preserved when the filter is changed

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:

  • Filter doesn't change structurally: No re filtering - preserve selection and viewed section
  • Filter changes but doesn't change the outcome: Same as above
  • The selected line passes the old as well as the new filter: Preserve selection (#3)
  • The selected line no longer passes the new filter: Lose selection (already implemented)
    #3 Poses an interesting problem because currently the view is immediately cleared when a filter is applied, and the previously selected line might be checked to pass the filter some time in the future (ms, seconds, minutes?). Therefore in order to preserve the selection, the view might need to not display anything until the source is fully filtered. Or maybe until the last position. The same applies to the currently viewed area.

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).

Enable grouping of multiple files

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.

Custom quick filters shall be supported

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.

  • Support regular expressions
  • Toggle show/exclude/highlight:
    • show hides all entries which don't match the filter
    • exclude hides all entries which match the filter
    • highlight colors matching entries by a user defined color, but shows all entries

LogFiles should be streamed from the disk

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)

Add systemtest

Add a system test project that tests:

  • The installer
  • The installed application

The width of a tab shall be configurable

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.

Auto update notification

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).

Allow copy to clipboard of multiple lines

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.

A log entry should only have one level

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

Log Event Count Widget

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:

  • Caption
  • Filter
  • Font size
  • Font color

The user shall be able to define the caption, filter, foreground color and font size.

Add export of (filtered) data source

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...

Add toggle for multiline support

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.

Finish search implementation

  • It should be possible to search through a data source
  • Advancing to the next/previous match must be possible
  • The current match should be highlighted
  • The current match must be brought to view (both vertically and horizontally)

The clock offset when grouping multiple files should be configurable

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.

Allow copy from editor

  • Instead of selecting entire lines, individual characters should be selectable (similar to Notepad)
  • Allow copy to clipboard via context menu and shortcut

Add toggle to filter out duplicate log entries

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 clock start timestamp should be configurable for log files which have timestamps relative to an arbitrary point in time

There are log files which don't store "absolute" timestamps, but those that start:

  • with 0 at midnight every day
  • with 0 at the start of their application
  • etc...

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).

Add toggle to allow filtering of empty lines

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.

Add quickfilter to filter by time

Filtering by time, e.g.

  • [Start, End]
  • [Start, inf)
  • [0, End]

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:

  • freeform text input, e.g. "now + 5s" or "15:56:00 - 16:00:21".
  • a timeline with the possibility to select a (sub) range with click + move (similar to how a rectangle selection in windows explorer is performed)
  • by clicking on a log entry in the viewer and then selecting (hide all before / hide all after)

The timespan of data sources shall be displayed on the timeline of the group

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).

Display serious log entries on the timeline

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.

Indicate that a data source's log entries are skipped when grouped

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.

Automatically detect if a data source is a (C)SV file

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.

Auto update execution

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.

Ditch ListView control for a custom control

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).

Add option to allow tabular display of log files

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).

Make log level colors configurable

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

Tailviewer keeps file handles open even when file isn' modified anymore

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.