In this chapter, we will cover the following recipes: Providing user-defined error types Providing logging Creating a custom logger Implementing the Drop trait Understanding RAII