At this point, this is sufficient for what I am needing, but have created an issue on the Github project to address large log files, and the ability to lazily read in the lines so the whole log file does not have to reside in memory.

The function parse-line, holds a regex, and does a match of each line against the pattern. It takes each part of the match and associates to a hash using the different parts of the log entry as a vector of the keywords that represent each part of the regex. This is done by reducing against an empty hash and taking the index of the part into match, the result of re-find.

Looking at this again a few days later, I went and created and issue to pull out the definition of pattern into a different definition, outside of the let, and even the parse-line function. I also want to go back and clean up the parsed-line from the let statement as it does not need to be declared inside the let, but can just pass the empty hash to the reduce. This was setup there before I refactored to a reduce, and was just associating keys one at a time to the index of matched as I was adding parts of the log entry.

Any comments on this are welcome, and I will be posting details on the other files soon as well.

Software Developer in the Dallas/Fort Worth Metroplex. Developed software using Java, Microsoft .NET stack, Ruby, Clojure and Erlang; but enjoy playing with and learning about different technologies to find different ways of doing things.
Host of the podcast Functional Geekery (http://www.functionalgeekery.com/) and founder of DFW Erlang user group (http://www.meetup.com/DFW-Erlang-User-Group/).