Aspect Oriented Programming

Aspect oriented programming is a methodology where pervasive sub-systems, like logging, are treated as a modular "aspect" of the entire system. Logging is an example of a "cross-cutting-concern"- pretty much every part of the system will interface with it.

In order to avoid repeating code for every implementation, it can be encapsulated as an "aspect" and wired into the overall framework. Doing this, you avoid repeating code and created a situation where your aspect "just works" from anywhere in a code base.