Summer of Code 2007 – Project Proposal for 'Adding Functionality and Usability Improvements to Chainsaw'

Name

Isuru Eranga Suriarachchi

Email

isurues@cse.mrt.ac.lk

Mentors

Mr. Paul Smith psmith@aconex.com

Mr. Scott Deboy sdeboy@comotivsystems.com

Project Title

Adding Functionality and Usability Improvements to Chainsaw

Abstract

Chainsaw is included in Apache/Log4j. It is a GUI based log viewer which is developed to load log events mainly through the 'Receiver' concept. Via these receivers, Chainsaw can load events generated by various frameworks like log4j, log4net, log4perl, log4cxx and java.util.logging. Other than that, Chainsaw can load log events using XML-formatted log files. Using both these mechanisms, Chainsaw can cater various applications. It's GUI features support a lot when it comes to debugging huge applications.

Currently Chainsaw is lacking some important features which can improve the usability of the tool in a great deal. Tailing capability in the VFS log viewer is one of the major improvements that should be done. There are some other features to implement in areas like receiver creation panel, remembering filter and search expressions between Chainsaw restarts and memory usage as well. And also there will be more ideas arising as this project go on.

This project would be an attempt to implement the required features in Chainsaw after some research to understand the best ways of improving the efficiency. This will improve the usability of the tool in a great deal.

Deliverables

1. Implement tailing capability in the VFS log viewer

2. Add ability to remember filter expressions and search expressions between Chainsaw restarts

3. Add goto-line feature with keyboard shortcut

4. Improve features regarding Tabs

5. Improve the receiver creation panel and ability to change receiver configurations in runtime

6. Improve the Chainsaw documentation and tutorials according to the new features and improvements

Project Details

Within this project to improve the capabilities of Chainsaw, following enhancements are taken into consideration.

Implement tailing capability in the VFS log viewer

The Receiver concept in Log4j is to receive log events from some source and deposit them in the Log4j framework in the local JVM. VFS log receiver is used as the Receiver for remote log file reading in different file systems like ssh, zip and files on an HTTP Server.

But the tailing capability which can be used to view the last part of the log file as new log events are added, is not supported currently in the VFS log Receiver. Tailing is supported in Chainsaw, only for local URLs but not for remote URLs. Currently the remote logs can be viewed once they are downloaded, but it doesn't get fed new log events on the fly. To get new log events, the log receiver should be reloaded.

The main goal of this project is to implement this tailing capability for the VFS log viewer with the ability to load new remote log events on the fly, without reloading the receiver.

Add ability to remember filter expressions and search expressions between Chainsaw restarts (for each logpanel)

Currently filter expressions and search expressions can not be stored in Chainsaw to be used after restarting Chainsaw. This will be a big advantage for the user to use expressions again and again. User will be given the opportunity of clearing useless expressions whenever needed. Expressions will be stored separately for each logpanel.

Improve the receiver creation panel

The receiver creation panel which is used to create and mange receivers in Chainsaw is lacking some major improvements. First of all it doesn't have the ability to save a configuration after creating the receiver. Other than that proper naming is needed in order to manage the receivers properly. And also the UI should be improved such that it is more usable and attractive. This improvement is also included in the scope of this project.

Ability to change receiver configurations while Chainsaw is running

Chainsaw provides the ability of configuring new receivers and installing those receivers into Log4j. But the receiver should be configured completely before the receiver is loaded. It doesn't have the ability of changing receiver configurations while the receiver is running. Implementing this ability in Chainsaw is also one of the goals of this project.

Ability to define custom expression logpanels which are always created when Chainsaw is started

Although Chainsaw supports custom expression logpanels, the user has to start it every time he starts Chainsaw. If a user wants a custom expression logpanel to use for a longer period, he has to define the panel again and again when he restarts Chainsaw.

Implementing the ability to define custom expression logpanels which are permanently started until it is deleted by the user is also aimed. User will be provided with an option to select whether he wants to keep the logpanel permanently or not, at the time he defines the logpanel.

Improve Chainsaw performance (memory use)

Memory usage is a vital factor to measure the performance of a tool like Chainsaw. This will be considered in this project and required changes will be done to minimize the memory usage after some research on data structures and algorithms used.

Other minor features in consideration

'Try to fit in' tasks

These tasks will be taken into consideration if there will be enough time

Project Plan

Step 1: Initial planning and research

Understand the existing architecture of Chainsaw and identify the most appropriate ways of doing the above mentioned enhancements. This includes a rough plan of progressing through the project.

Estimated Completion: 27th of May

Step 2: Implementing tailing capability in VFS log receiver

Complete the tailing capability implementation in VFS log receiver and do the improvements needed in the UI to cater the functionality.

Estimated Completion: 11th of June

Step 3: Making Chainsaw remember expressions

Add ability to remember filter expressions and search expressions between Chainsaw restarts

Estimated Completion: 25th of June

Step 4: Working on goto-line

Add goto-line feature with keyboard shortcut

Estimated Completion: 2nd of July

Step 5: Working on Tabs

Add ability to hide/show welcome and drag & drop tabs and remember that setting between restarts

Estimated Completion: 9 th of July

Mid-term evaluation - 9th of July to 16th of July

Step 6: Enhancing Filter applying mechanism

Maintain selected line when applying a filter if the selected line passes the filter expression

Estimated Completion: 23th of July

Step 7: Working on Receiver Creation Panel

Improve the receiver creation panel and add ability to change receiver configurations in runtime

Estimated Completion: 6th of August

Step 8: Final adjustments and performance improvements

Improve performance of the tool and reduce the memory usage.

Estimated Completion: 13th of August

Step 9: Documentation improvements

Include the new features in the documentation and enhance the tutorial if needed.

Estimated Completion: 20th of August

Biography

I'm a Level 3 undergraduate student of the Computer Science and Engineering department of University of Moratuwa, Sri Lanka.

By now I have been working on Apache Axis2/Java for more than 5 months. I was working on several areas of Apache Axis2 and I implemented JSON Support for Axis2. It was a great experience for me as I'm still new to open source development. I have posted an article on this implementation with more details at http://wso2.org/library/768. Other than that I have contributed the Codehaus/Jettison (http://jettison.codehaus.org/) project and submitted reasonable amount of patches as I needed Jettison while I was working on JSON implementation in Axis2.

I think I have gained reasonable amount of experiences in open source development through working on above mentioned projects. I'm really interested in open source development and always hoping to contribute in valuable projects.

References

University of Moratuwa - http://www.mrt.ac.lk

Department of Computer Science and Engineering - http://www.cse.mrt.ac.lk

Chainsaw - http://logging.apache.org/log4j/docs/chainsaw.html

Log4j - http://logging.apache.org/log4j/docs/index.html