state of the art logging

19
Milan Vukoje [email protected] www.vukoje.net State of the art logging October 23 rd 2013

Upload: milan-vukoje

Post on 04-Jul-2015

260 views

Category:

Technology


0 download

DESCRIPTION

How to build state of the art production system instrumenting so you can easily understand what is going on in your production system? Which component to use? Log4Net, NLog, System.Trace, custom solution… Event vs Trace (Monitoring vs Performance) Tracing steps with “using” notation. AOP vs manual logging Where to output data? How to scope data? How not to kill app performance? How to bake in app profiler in your tracing lib? Demo of Webcom powerful GUI for trace analytics system. Demo of AOP logging in MVC web app using NLog.

TRANSCRIPT

Page 1: State of the art logging

Milan Vukoje

[email protected]

www.vukoje.net

State of the art logging

October 23rd 2013

Page 2: State of the art logging

Intro

• Webcomwww.webcominc.com

• We are hiring!

Page 3: State of the art logging

Topics

• What is tracing?

• How to build it?

• Logger as profiler

• Logger design

• Log analysis

• Demo 1 – WEBCOM trace analysis GUI

• Demo 2 – AOP logging in MVC with NLog and Glimpse

Page 4: State of the art logging

What is tracing?

• How to know what is production system doing?• Why not remote debugging?• Why not profiler?• What more?

• Debugging• Profiling• Notifications• logs as data

Page 5: State of the art logging

So how to build it?

• Custom solution?• System.Diagnostics.Trace?• IntelliTrace?• Log4Net?

• no support for CSV• no support for dynamic file naming• java port with a bit awkward code• last release in 2006

• Nlog?• simple• good code• Plenty of features• side project by MS employee

Page 6: State of the art logging

Where to store logs?

• File system• Accessibility• Cleanup• Replication• Affecting speed

• Event log• Database• Cloud• App memory

• web farms?• session dependency• Out of memory

Page 7: State of the art logging

Logger as profiler

• When off – no impact• When on – trivial impact• Delay messages formatting!• Avoid DateTime.Now;• Use StopWatch.GetTimeStamp();

Page 8: State of the art logging

“using” vs. start/end logs

• better for functions with multiple exit points• works good with exception control flow• less repeated work• better support for automatization

Page 9: State of the art logging

Logger design issues

• Hide behind facade• Logger must not break• Should not be transactional• GUI for runtime configuration• Redundant logs• Editable logs• Logs size and cleanup• Avoid conditional tracing

Page 10: State of the art logging

Log levels

• Levels are not informative enough• We need more meaningful API• Trace (Low/High)

• debug and performance info• Events (Info/Warn/Error/Fatal)

• durable info with different types • suitable for monitoring• much less than trace

Page 11: State of the art logging

Log entity data

• Message/title + description• Log level• Timestamp• Exception call stack• Logger name - extracted from class name

• Additional data• labels (categories)• ticks

Page 12: State of the art logging

Log context data

• Event context • App/Tenant/User/HttpRequest…

• Trace buffer• Session buffer• Trace call back and tag

Page 13: State of the art logging

AOP vs. manual logging

Page 14: State of the art logging

AOP vs. manual logging

• AOP• easy• too much logs• no explanations, just method names

• Manual• boring• repetitive• better control• better meaning

• Combine them!• Explain through logs

Page 15: State of the art logging

How to scope logs?

• No scoping• Per app• Per server• Per tenant• Per user • Per user action• Configurable

Page 16: State of the art logging

Log analysis?

• Log as data• Notepad(++)• Excel (csv)• LogParser studio• Integrated app tool

Page 17: State of the art logging

Demo 1 – WEBCOM trace analysis GUI

Page 18: State of the art logging

Demo 2 – AOP logging in MVC web app using NLog and Glimpse

Page 19: State of the art logging

Thank you for your attention!

Any Questions?

[email protected]