Design decision for logview4net and a new release.
New year, new release.
This release incorporates the performance fixes that were maid last week after some user feedback.
I still have no intentions to turn logview4net into a full featured log parser, but now it can handle much bigger datasets than before. If I get some bright ideas it might get faster still. The problem is that I load all existing data into the textbox that shows the data. So if you add a file or SQL listener and there is lots of data already there and you choose to show it all; logview4net will treat each row as a separate message and show each message one at a time.
The design decision I’ve made for logview4net is that all listeners are treated as being forward only data. This means that I can’t get past time data from a listener, it will send new data to the part of the program I call the viewer. The viewer is essentially the textbox that shows all formatted data. This decision was made because I’d rather have lots of available datasources than a fast way to look at old data. logview4net was initially and primarily built to be a real time log viewer/monitor, not a log parser to use on historic data.
If I only worked with random access data I could take the same approach as Kiwi Log Viewer and load only the data that the use can see at the moment. I have some ideas on how to merge these worlds and I’ll probably use the blog to make them more tangible for myself.
The changes made to release 8.01 removed lots of processing time when receiving an event but the greediest part is the RichTextBox that comes with the .Net Framework so I’m looking for a replacement for that.
Performance issues in logview4net
I recently got a message from a user who had performance issues with logview4net when using the pause function in combination with lots of incoming events. Since pause is probably mostly used in situations when there are lots of events I guess more users than Bill and I have noticed it before. I have two cores on my main machine so I usually just let it be until logview4net has recovered by it self. The problem is that almost all processing of an event takes place when it is time to display it, not when it is received. When running in normal mode this is ok, but when coming back from pause mode this places a big burden on the display thread.
I’ve made a change today so that the application does all processing of an event, except the coloring, before it is sent to the cache when in pause mode. That way the processor utilization should be almost the same when in pause mode as when running normally.
I will make the new release in the first week of January to get the nice version number 8.01
Commercial licensing of open sourced applications
I am thinking of releasing logview4net under a commercial license as well as the BSD license I am using now. This would enable users in organizations that dislike open source to use the application anyway.
Besides the political issues I need something else to motivate an organization to pay for something that is given away for free. There is at least one new listener coming up and I could definitively release updates earlier to commercial users. I don’t like having to manage two code bases so the compiler savvy could always get the latest version from SourceForge. I guess I could include the source and documentation in the commercial package if someone wants to run the application without internet access. On that note I could offer email notification to commercial customers when there are new updates.
Do you have any thoughts on this?
New release of logview4net 7.49
Yesterday I slipped out a new version of logview4net. It was just a very small bugfix. I had lost the checkbox for adding a filename to the listener prefix in the settings for the folder listener.
Big ups to Paul who told me about it.
It is sometimes tough to turn down help
About a week ago I was offered help to translate logview4net to Russian. The offer came from a gentleman owning an open sourced project for translating .NET applications.
Of course I was thrilled by the offer. I had really thought about localizing it, but since English and Swedish is all I know I haven’t put it on top of my to do list. Most, if not all, Swedish users of logview4net are probably happy using it in English.
Anyway; after looking at the technical solution I decided I didn’t want to use it in my application. I feel a bit bad for letting him do all the work before I looked at his solution. I assumed to much. A bad habit I really need to get rid of. I have localized one large application as an after thought and one as part of the design so my decision is at least based on some experience.
I hope my turn down letter will be regarded as constructive criticism and not a flipped finger.
To any one else wanting to write tools for localizing applications; there a lots of stuff that works in the .NET framework. Try to create tools for all the things that are missing instead of starting from scratch.
Encodings in logview4net
Today a made a new release of logview4net.
I got an error report from a user who had set up a UDP logger with log4net and got loads of weird characters in logview4net. I had hard coded Unicode and log4net was sending something else.
This led me to add a drop down list with available encoders to the Udp Listener. I might do the same for the file listeners in the near future.
This release is number 7.39
The documentation at http://logview4net.com will be updated with new screenshots soon.
FreeMind and the current job
The current job is about defining/refining and documenting a system that is a couple of years old. I was a big part in building it initially but it has grown without much control since then.
As I see it, the main reason it is hard to get a grasp of it now is because there is (or has never been) a central role to consolidate the development. For each little project there has been a new project manager who only wanted to do his part at the lowest cost or him. No one has taken, or gotten, responsibility for all of it. This has led to more than one ugly hack to solve the same issue in different sub projects.
Now they have taken the opportunity to try to figure out what functionality there actually is, and what should be reused or refactored.
This is the first time my deliverables aren’t code. Starting with a blank sheet is always hard, but I remembered FreeMind, a free mind mapping tool. It helps a lot with the blank sheet syndrome since one can start dumping information in it and organize it later. Of course that is possible in any other text editor, but the graphical metaphor of FreeMind helps, at least me, get over the writers block.
I haven’t run FreeMind in Vista before so it was not very pleasant to discover that all file operations on new files failed. I solved it by copying one of the document that came with the install. When I double click it in my favorite file manager it starts FreeMind and I can save changes to ‘old’ documents. It is apparently a known bug so I will keep recommending FreeMind to any one who wants to listen.
I used to build my documentation for logview4net in a commercial competitor called Mind Manager. I think I will start using FreeMind for both logveiw4net and jsiPodFetch in the future.
Sharpdevelop, resources and compiler error
When I moved logview4net to SharpDevelop I got the dreaded CodeDomSerializerException in the WinForm designer. It complained about resources not existing.
Since everything worked in Visual Studio and the application compiles and runs I started looking for other things. After some digging around I found that the properties in the typed resource class was declared internal. I changed the modifiers to public instead and now the WinForm designer works again.
New release of logview4net (7.28)
I just made a new release of logview4net.
New features are:
- A StdOut / StdErr listener
- A block ignore action
Goto jsiSoft.com to download it.
CHANGELOG:
7.28
Fixed: Add an IgnoreBlock action that should have an IgnoreStart + IgnoreEnd pattern
Fixed: Make it possible to ingore events on pause instead of caching them.
Fixed: Make the cmd-line parser use the StdOut-listener for .exe-files
Enabled the StdOut listener
Fixed a dispose bug on all listeners.
logview4net and Windows Vista
For my upcoming release of logview4net I did the manifest magic to elevate the process to run as administrator. I did this because I kept getting SecurityExceptions when I wanted to monitor the EventLog.
I have however decided to remove the manifest so that a user would have to explicitly run the application as administrator to monitor the EventLog or other locked down resources. The reason being that I thought it was annoying to confirm the elevation when I didn’t need it and I felt like I was cheating. The UAC is there for a reason. If a user has to be explicit about elevating the process he can feel a little bit safer when running logview4net without elevation.
By forcing elevation I also made the application impossible to run for users who are not administrators on their machine and that wasn’t very nice of me.
I don’t know how to grant rights to the EventLog so a normal user can read it, but I will figure that out and blog about it later.
