rdiachenko / jlv Goto Github PK
View Code? Open in Web Editor NEWJava logging viewer
License: Eclipse Public License 1.0
Java logging viewer
License: Eclipse Public License 1.0
Which set up should I make to begin working on the project. Look at: http://code.google.com/p/log4j-viewer/w/list
Add possibility to make a quick search in logview by text.
F.e.: press Ctrl-F, enter a search text to filter the logview's content and display the only logs with this text.
Consider to not use a separate dialog. Probably, a good way will be to use text field which will be appeared in logview's panel by clicking Ctrl-F or pressing 'Quick search' button on the logview's panel.
Add 'Ctrl+F' shortcut for opening quick search field in log view
Add preference to manipulate the logview's refresh time.
Currently, logview is refreshed periodically each 1500 ms while server is on.
Be more specific and rename logs table in db to log4j1 table in order for supporting other logging systems and give to db tables such names.
Look at this plugin: http://marketplace.eclipse.org/node/185332#.UhPZ9-YW3b-
Modify deploy.sh script so that each jlv release a new tag will be created in master branch.
While building the project there are maven warnings which should be fixed.
Currently there are Log4jServerRunner for starting logging server and TestLoggingApp (a client which logs some test messages using log4j-test.properties configuration). The client's log messages goes to server through socket; server creates a separate thread for the client and this thread collect all log messages into jlv.h2.db data base.
We need to avoid these server and client runners and put their logic into test in order do not run them manually.
Test should:
Add information about release notes and how to contribute the project with links to wiki pages. Also create list of related projects.
When running under Eclipse 4 there are NullPointerExceptions occurred in this code:
private void initServerActions() {
startServerAction = ((ActionContributionItem) getViewSite().getActionBars().getToolBarManager()
.find(START_SERVER_ACTION_ID)).getAction();
stopServerAction = ((ActionContributionItem) getViewSite().getActionBars().getToolBarManager()
.find(STOP_SERVER_ACTION_ID)).getAction();
.... }
Migrate jlv to support Eclipse 4. Read for more details about Eclipse 4 model: http://www.vogella.com/articles/EclipseRCP/article.html and here http://wiki.eclipse.org/Eclipse4/Tutorials
Reported by @romani, Nov 2, 2010
Add functionality to support:
Current approach:
We need to avoid such complexity by optimizing the deployment process.
Make some investigation about gui testing tools for Eclipse plugins. We can start with SWTBot: http://www.eclipse.org/swtbot/
[22-Apr-2013-13:07:36:539][51][ClientThread][WARN]: Exception occur while reading object from socket input stream:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2553)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1296)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at com.rdiachenko.jlv.log4j.socketappender.ClientThread.run(ClientThread.java:40)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Steps to reproduce the exception:
Currently jlv supports only log4j clients.
We should provide support for other mainstream logging systems such as logback, commons logging, ...
A new client should be created for each new logging system (example: ClientThread).
Create preferences in eclipse plugin in order the user can choose between the supported clients. Default client should be log4j logging system. When user choose another client, the server should switch to the new client and use it to provide new logs.
Consider renaming jlv views as follows:
Main view > JLV log list
Detailed view > JLV log details
Add preference to quick search field to store its open/closed state.
Currently it is always displayed in the logview's bottom. We should store its state when pressing on quick search button in the logview's toolbar.
Look at this article for the first step.
I found this old code in LogDaoIml:
public LogDaoImpl() {
logEventListener = new LogEventListener() {
public void handleLogEvent(final Log log) {
}
public void endLogEvent() {
}
};
LogEventContainer.addListener(logEventListener);
}
Consider removing it and look for other places and remove all unnecessary code.
Make some notes about working with issues using git workflow. Consider creating a separate branch for each issue.
Try to use Eclipse native logging system. Look here for more details: http://www.jumpingbean.co.za/blogs/mark/eclipse-rcp-logging
Also in scope of this issue find way to log only jlv related logs to console
Move 'logs' table creation from ClientThread to LogDao
To avoid such bugs increase size for LOGINFO fileld in db:
Caused by: org.h2.jdbc.JdbcSQLException: Value too long for column
"LOCINFO VARCHAR(100) DEFAULT ''":
Exception occurred when there are a lot of logs come via socket (tested on 500000 logs) and displayed in logview.
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.core.runtime.AssertionFailedException: null argument:)
at org.eclipse.swt.SWT.error(SWT.java:4397)
at org.eclipse.swt.SWT.error(SWT.java:4312)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3717)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3366)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
Caused by: org.eclipse.core.runtime.AssertionFailedException: null argument:
at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85)
at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73)
at org.eclipse.jface.viewers.StructuredViewer.assertElementsNotNull(StructuredViewer.java:599)
at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:1011)
at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:721)
at org.eclipse.jface.viewers.AbstractTableViewer.getRawChildren(AbstractTableViewer.java:1090)
at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:917)
at org.eclipse.jface.viewers.StructuredViewer.getSortedChildren(StructuredViewer.java:1067)
at org.eclipse.jface.viewers.AbstractTableViewer.internalVirtualRefreshAll(AbstractTableViewer.java:677)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:652)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:637)
at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:1508)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1443)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1404)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1506)
at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:544)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1465)
at com.rdiachenko.jlv.ui.views.JlvView.refreshViewer(JlvView.java:108)
at com.rdiachenko.jlv.ui.views.JlvViewController$4.run(JlvViewController.java:139)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
... 24 more
Create a separate view which shows detailed info about log. Detailed logview should be opened when clicking on log in logview.
Based on investigation in Issue #8 create tests for logging server preferences and logview.
JLV Eclipse plugin build failed after executing the following command:
$ mvn -f parent-pom.xml clean install -X
[ERROR] Failed to execute goal org.eclipse.tycho:tycho-packaging-plugin:0.16.0:validate-id (default-validate-id) on project jlv-eclipse-plugin: The Maven artifactId (currently: "jlv-eclipse-plugin") must be the same as the bundle symbolic name (currently: "com.rdiachenko.jlv") -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.eclipse.tycho:tycho-packaging-plugin:0.16.0:validate-id (default-validate-id) on project jlv-eclipse-plugin: The Maven artifactId (currently: "jlv-eclipse-plugin") must be the same as the bundle symbolic name (currently: "com.rdiachenko.jlv")
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: The Maven artifactId (currently: "jlv-eclipse-plugin") must be the same as the bundle symbolic name (currently: "com.rdiachenko.jlv")
at org.eclipse.tycho.buildversion.ValidateIdMojo.failBuildDueToIdMismatch(ValidateIdMojo.java:26)
at org.eclipse.tycho.buildversion.ValidateIdMojo.execute(ValidateIdMojo.java:18)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more
Rename jlv project to jlv-core. Update all dependencies with the new name.
Look at:
Look through tycho configuration, try to find possibility to add dependencies via maven pom.xml
Logs continue going to logview after stopping server. It is a wrong behaviour which should be fixed.
https://github.com/rdiachenko/jlv/blob/master/jlv-eclipse-plugin/jlv-feature/feature.xml
We need to describe the project, its main features and goals. Provide screenshots and howto use page.
Reported by RomanIvanovJR, Nov 14, 2011
Log Levels are limited - FATAL, ERROR, FINE, FINEST, .... .
But displaying a text of them is space consuming.
Let user and option in preferences to show icons instead of text and make this column as narrow as possible with tool-tip text for quick reference. Dictionary of images will be shown in Preferences.
Remember that in major cases user care only about Message column - so we need to provide an options to make this column as wide(easy to read) as possible.
Single out all duplicated string constants in one place to avoid duplicated code. F.g. columns' names in logs table and so on.
We need to provide logging for the project. Consider using log4j+slf4j or logback+slf4j or using Eclipse's native resources for logging. Look at these topics:
We need to load text logs from log file and represent them as objects. The following features should be supported:
Investigate Travis continuous integration server and configure it for jlv.
More about Travis: http://about.travis-ci.org/docs/
The text is not found when searching it in exception message
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.