I haven't designed many programs and I think a logging library would make for a good project:
1. It can start out simple and grow as I need more appenders. 2. There are a few core features (string formatting, filters/log levels) that need to remain functional as more features are added. 3. Good segue into writing thread-safe code (e.g., say at some point I write some multi-threaded app, like a GUI, and want to use my logger library for troubleshooting). 4. Good segue into writing a GUI to view logs in real-time. I've seen this feature at work, which uses UDP logging. This is also a good segue into network programming. 5. Good exercise for unit testing features that are in development, regression testing to ensure core features don't break.
I expect to get lost in the process and would like to know how to document my design so others know what I'm trying to do and why. This paper trail should be coherent enough to serve as an interesting case study for beginners who are trying to understand the design process of a more complex application.
Some ideas I have in mind for how to achieve this:
1. Code uploaded to github. 2. Write a design doc for the initial set of core features. Should include how to test those features. Should include a map that details the order in which features are worked on. 3. For each new feature in development, write a design doc that outlines what/why a feature is being developed, how it can be tested, what changes are required to the current code base to implement that feature, and how it'd be implemented.
If you were to help me troubleshoot my code, what would you like to see?