Gurock Software has announced the release of SmartInspect 1.4, a new version of their advanced logging tool for .NET, Java and Delphi. New in this release is a Tasks toolbox which offers shortcuts to often used tasks like opening recent log files and searching for log entries, and links to help topics for first-time users to get started with SmartInspect.
- Posted by: Dennis Gurock
- Posted on: April 27 2006 15:31 EDT
Additionally the SmartInspect 1.4 libraries now contain support for configuration files to load properties like the log level, enabled status and application name at run-time. This allows SmartInspect users to dynamically configure the libraries without changing the source code of their applications. To simplify the creation of configuration files, the former Connections Builder tool has been extended to support the additional configuration file options and has been renamed to the SmartInspect Configuration Builder.
What are the reasons for using SmartInspect over Log4J? I read the blurb, and despite it's $300 per user price tag it seems to be an inferior product.
Log4J can output to files (which automatically roll after a set size / period of time), over SNMP, TCP/IP, JMS, JDBC, SMTP, SysLog, NT Event Log and even SMS.
SmartInspect can only log over TCP/IP or to a binary file, which cannot be parsed by third party software (Tivoli / BMC Patrol etc).
If a GUI is really that important Log4J has Chainsaw, which works over TCP/IP and I believe can also be configured to read log files.
The only reason I can find for using SmartInspect is if you're writing code in Delphi - which doesn't currently have a mature Log4J port.
If I've missed something please point it out.
SmartInspect uses an entire different approach than traditional logging frameworks like log4j or log4net. While log4j can only output simple text messages via the debug, verbose and similar methods, SmartInspect goes further and can log entire objects (logObject logs public and private fields of an object), arrays (logArray) and JDBC objects (logResultSet), just to name a few methods.
The results are conveniently displayed in the Console (our GUI viewer application). For example, if you log an object via logObject, its fields are displayed in an object inspector viewer similar to those of popular IDEs. Or, if you log a JDBC ResultSet, you get its entire table displayed in the table viewer. There are many more viewers in the Console for displaying your data. There is a hex viewer which can be very useful to display binary data (for example, via logBinary which takes a byte or logBinaryStream which takes an InputStream), an image viewer, list viewer and more.
Additionally, there are methods like enterMethod and leaveMethod which let you generate a tree-like logging structure instead of a flat list of log messages like in log4j. Via the help of the enterMethod and leaveMethod methods, the Console displays the call stack for every log message and you can collapse/expand entire methods. Furthermore, with SmartInspect you can log Watches (watchString, watchInt etc.) to track variable values and can generate thread and process information about your application.
Another problem besides the limited logging capabilities of log4j and similar tools is the lack of navigation in a log. Once you have a log4j generated log of information, there is no easy way to navigate through, search or filter this log. In contrast, in SmartInspect this is an integral part of the concept.
For instance, with the Console, you can add powerful filters, so called views, which let you filter for a broad range of properties. For example, you can add a view which should only display log messages of a certain thread or process. You can even let the Console create those filters automatically with our AutoView rules feature. For instance, you can add a rule which says that the Console should create a new view for every thread of your application. Once the Console receives a new log message (either via TCP/IP or via log files) which has been sent from a thread which doesn't have an own view yet, it creates one for that particular thread.
Besides the filtering, the Console offers advanced navigation and search functionality (with regular expression support). You can even forward a log from one Console to another or export your log to the XML, CSV or HTML formats for further processing.
I know log4j has Chainsaw but this tool is, while useful of course, in no way comparable to the Console. And it's certainly correct that log4j does have far more logging destinations than SmartInspect, but if someone desperately needs something like email notification or JDBC logging, SmartInspect can easily be extended to handle this.
JXInsight comes with an extensible tracing and profiling facility that does not by default require any explicit source code instrumentation of the application. We record a wealth of runtime contextual information not present in any single tool on the market. Our JVM agent builds a complete working model of the JVM and execution patterns including classloaders, callstacks, class and member meta information, annotations, standard deployment files, threads, thread groups, events (gc, thread blocking, thread waiting)....
JXInsight also comes with an powerful application management console that makes analysis of performance and trace data across an user defined cluster as easy as is possible.
For further information please check out our Insight articles: http://www.jinspired.com/products/jxinsight/insights.html
We just published a new insight article highlighting our contextual trace state inspection capabilities.
JXInsight Product Architect
"J2EE tuning, testing, and tracing with JXInsight"