views:

132

answers:

4

The company I work for is redesigning our application in .NET. Our application is sold using the Software as a Service model.

We track all of our users actions in the software for reporting purposes (searching for things, downloading assets, completing forms, what is associated with the form they are creating, snap shot of the user's profile and details upon login, etc). Previously we had written a very robust tracking logic to complete all these details in our old application.

Before I complete this initial redesign in the .NET application I wanted to know if anyone has recommendations of off the shelf tracking solutions or open source tracking systems they have implemented in the past that are fairly robust.

Additional Details: We have a lot of custom data (specific to our application) that needs to be tracked and our application is only accessed via company intranet sites so details on where people are coming from is not needed as we already know this.

I am planning on tracking page hits so a user's visit can be recreated if necessary.

EDIT (11/20/2009): There does not appear to be exactly an off the shelf solution to fit my problem but I'll be updating this question with a design and direction we are going to implement in the next couple of weeks. So if you are interested in what happened with this question then check back soon.

A: 

Microsoft's Enterprise Library has some parts that may be helpful with some of the basic plumbing you may want for exception handling/logging for reporting purposes. There may be other software packages like log4net that could also work for a specific part of the application that others could suggest.

Just a couple of ideas for things to evaluate how well they would work for you.

JB King
log4net is a great application for logging but might be difficult to use if you want to track robust object details. If you can get all the info you need with a general logger to a database, definitely go with log4
Russell Steen
@Russell - I agree that log4net is a great application for logging but it would be difficult to use it to track robust object details.If we end up coding the entire tracking ourselves I might try to abstract a framework I can post on sourceforge or something. I figure we'll wire up a handler/module for some things and create a tracking event wire up through our main "Page" class.
Dan
+1  A: 

Our company uses log4net for tracking users actions. We also have actions inserted into the database for any action a user takes on our applications. With log4Net you can get pretty granular in what you log and where it logs. here is a direct link download of their binaries for version 1.2.10 (latest as of today). Once you have it configured, it is really easy to use and log information.

Hope this helps,

Scott

Scott
log4net was exactly designed for tracking a user's actions and we already use log4net in our application for general application logging/debugging. Thanks for your feedback regarding this.
Dan
+1  A: 

Well... there are really three different types of tracking (loggin) levels that you mentioned and different tools for each.

In your post you mention:

  1. Tracking the pages the users visits: To me this would be a function of the web server. IIS (I assume IIS because you said it is .Net) will log all this stuff for you. There are several tools to mine that information.

  2. Business transactions: Suff like, the user printed a report. The user ran a process, etc. These aren't really always specific to any data changing. Using a tool like log4net and an IoC container to inject this type of logging into your business objects would work well.

  3. Data modifications: This is data level tracking. There are several ways to do this. But, I would recommened putting it close to the data base. It is probably a bit easier to do it in the DAL but what if someone changes data in the database outside of the application. Of course that may not be possible in your case. I have seen this done with triggers. But, SQL 2008 added change tracking inbuilt.

So, I would say you need a combination of all three tools. Perhaps you can consolidate all the data into a single table or two to simplify viewing and mining it.

PilotBob
A: 

Level of indirection. Implement a reverse proxy with input filters (Apache?) that log both requests and request parameters to a DB. Reporting and session recreation become greatly eased.

Xepoch
In a business application, most of the details you are interested in tracking are not typically passed back and forth through requests
Dan