Debugging Log4J: where are my log messages going?

If you’re looking for interesting reading, this is not it. Today the question emerged: where are this test’s log messages going? Sticking a debug point somewhere and doing Logger.getLogger(“blah”), then digging into the resulting Logger object, revealed the answer. The Logger object had a parent member (a RootLogger), which had a member aai (AppenderAttachableImpl), which … Read moreDebugging Log4J: where are my log messages going?

Product vs Platform in Programming Languages

There’s a big rant floating around the internet this week about Products vs Platforms. Platforms are service-based, with layer upon layer of exposed and secured and throttled services, while Products give the user everything they need in a perfect streamlined form. That is, Products give the user exactly what the builder of the Product believes … Read moreProduct vs Platform in Programming Languages

Keeping Your Cache Down to Size

Guava’s CacheBuilder provides several options for keeping a cache down to a reasonable size. Entries can expire for multiple reasons, entries can be limited to a certain number, and entries can be made available for garbage collection. These options can be used individually or together. Each is simply one more method call during cache creation. … Read moreKeeping Your Cache Down to Size

Goodbye, MapMaker. Hello, CacheBuilder.

Google has released a new version of Guava, and it’s bad news for one of my favorite classes, MapMaker. The exciting feature of MapMaker is its ability to produce an insta-cache, a key-value mapping that calculates values on the fly, expires them, and limits the quantity stored — all while maintaining thread safety. In release … Read moreGoodbye, MapMaker. Hello, CacheBuilder.