Logging is of course a cross-cutting concern that you want to be able to do from everywhere within the layers of your application. Common.logging provides an abstraction between the library and the actual loggin implementation of the application. That's why you'll find that a lot of .NET libraries reference common.logging. This enables users of the library to hook up that common.logging to their own logging implementation in the actual application and see what the library is logging.
So I turned my invoice example into a nice n-tier application with a:
- Domain layer ( cross cutting )
- Data access layer
- Console application layer
- Utilities ( cross cutting )
This is Visual Studio 2012 'show on code map' - could be Ultimate only though ...
All of these projects are referencing common.logging. But only one project ( namely the 'presentation' layer - console application in this case ) references common.logging.nlog ( an adapter for common.logging onto nlog ) and of course NLog itself:
Finally tweak your web.config or app.config for funneling all the common.logging stuff into the NLog targets you desire:
In every class you want to have a field like so:
private static readonly ILog log = LogManager.GetLoggerWhich allows you to access the log and get a nice prefix of what class is logging. I've decorated my 'GetRandomInvoice' method and the extension method with a few logging calls, and here's what you get:();
10:07:31 ConsoleApp.Business.InvoiceService New random invoice is being created ... 10:07:31 ConsoleApp.Business.InvoiceService New random invoice creation is done! 10:07:31 ConsoleApp.Utilities.StringExtensions String 'Computer' is being made to length 15 10:07:31 ConsoleApp.Utilities.StringExtensions String 'Printers' is being made to length 15 10:07:31 ConsoleApp.Utilities.StringExtensions String 'Paper' is being made to length 15 10:07:31 ConsoleApp.Utilities.StringExtensions String 'Some more computer supplies' is being made to length 15 10:07:31 ConsoleApp.Utilities.StringExtensions String 'Other stuff' is being made to length 15 10:07:31 ConsoleApp.Utilities.StringExtensions String 'Product id 54' is being made to length 15 10:07:31 ConsoleApp.Utilities.StringExtensions String 'Product id 64' is being made to length 15 10:07:31 ConsoleApp.Utilities.StringExtensions String 'Product id 20' is being made to length 15 10:07:31 ConsoleApp.Utilities.StringExtensions String 'Total:' is being made to length 15 10:07:31 ConsoleApplication1.Program Generated invoice looks like this: Invoice - Id:1 Date:13-7-2013 ---------------------------------- Computer USD 899,00 Printers USD 49,99 Paper USD 12,50 Some more co... USD 12,50 Other stuff USD 12,50 Product id 54 USD 90,59 Product id 64 USD 70,13 Product id 20 USD 87,36 ---------------------------------- Total: USD 1231,00As they say on .NET Rocks! Learn it, love it, use it.
No comments:
Post a Comment