Monday, 17 November 2014

Fun (or rather not) with EventSource

I’ve been an advocate of good logging in applications (especially server side ones) for many years, and today I’m working on something for myself and wanted to use the latest and greatest event logging framework so chose System.Diagnostics.Tracing (which has been around since .NET 4 days). I’ve used it before but today I came across an issue that had me stumped for some time.

I’d created a custom event source, and derived this from an interface so that I could inject an implementation in at runtime…

  public interface ILogger
{
void T1(string message);
void T2(string message);
}

public class Logger : EventSource, ILogger
{
public void T1(string message) { this.WriteEvent(1, message); }
public void T2(string message) { this.WriteEvent(2, message); }
}

But when I used PerfView to view my events there were none. After a lot of head scratching I tried a sample from Vance’s blog (which seems to be the main place to get any information about this feature) and of course that worked first time. I did some more fiddling in code and then stumbled across the reason as I was debugging the code. It’s worthy of a blog post, as this may well catch someone else out.


I’d created the interface and implemented it in the EventSource derived class so that I could mock out the logger code for testing – however this was the part that caught me out. When the code runs, the EventSource class builds a manifest that contains details of the "events" that are written out – and this uses the following bit of reflection to get all the methods that we want to expose as "events" in the ETW trace…

  MethodInfo[] methods = eventSourceType.GetMethods(BindingFlags.NonPublic | 
BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.DeclaredOnly);

I’ve highlighted the offending enum value above. This is saying "find me all methods whether public or not, defined on this Instance ONLY". So, because I’d created an interface and then implemented that interface, my methods were not found by the code that generates the manifest, and hence I wasn’t getting anything useful in the ETL file.


The net effect of this is that I cannot directly use an interface to define an interface for the events I want to emit. There are a few ways around this I can think up…



  • Hard-code the logger class as in the examples on Vance’s posts. Nope, not going to fly, I this stuff to be mockable/testable!
  • Create an EventSource derived class and add shim methods to call the actual logging methods
  • Write my own version of EventSource, seems like a lot of work for little gain!
  • Create a shim class that forwards all calls to the EventSource derived class

Of these I picked the last, as I do want my event source code to be mockable, and it seemed to be the least bad of the options, so I ended up with the following class...

  public class ActualLogger : EventSource
{
public void T1(string message) { this.WriteEvent(1, message); }
public void T2(string message) { this.WriteEvent(2, message); }
public static ActualLogger Instance { get { return _instance; } }
static ActualLogger _instance = new ActualLogger();
}

public class Logger : ILogger
{
public void T1(string message) { ActualLogger.Instance.T1(message); }
public void T2(string message) { ActualLogger.Instance.T2(message); }
}

Well, something like that anyway!


As an aside, if you want to look at the manifest that is generated from your EventSource derived class, there's a static method on EventSource that can be useful...

    var manifest = EventSource.GenerateManifest(typeof(ActualLogger), typeof(ActualLogger).Assembly.Location);

Hope this helps someone!

24 comments:

essay writing service australia said...

i am reading your blog and i realise i would be needing the same deal for my work too. you seem sesible. i like how you write it is very thorough keep updating

Oliver Maurice said...

You should check this article out. Its completely about oxford style of writing and you will need this info if you decide to attend one of the greatest universities in the world

AngelaHolt said...

This is really very nice post you shared, i like the post, thanks for sharing.. Sp flash tools Leapdroid Deezloader

Tyson Harold said...

Nice post.

poppup said...

This is really very nice post you shared, i like the post, thanks for sharing.. Sp flash tools deezloader android

meldaresearchusa said...

From our custom affordable term papers, students can hire the best writers and be assured to receive the best custom papers when they search purchase custom research paper written by experts.

Assignment Help said...

Your article is very nice to thank you for share this informative blog.
Auditing Assignment Help

KeiraDoltan said...

Most of the student Fear of Missing Deadline and therefore stressful for any kind of Academic work. If You Hire, Help With Assignment Then you will be able to meet Deadline Without any burden.

meldaresearch said...

Your search for Custom Research Paper Writing Services ends here. Welcome to the home of best essay writers who are qualified in diverse fields. Our
Research Paper Writing Service
is proof that we are right near you. It is easy, place your order and get original plagiarism free assignments. What’s more, we keep everything confidential.

sitampan said...

Gunakan kesempatan emas bermain di wedeqq dan juga fifaqq. Jangan lupa untuk bergabung juga di taipanqq beserta kebanggan situs lipoqq yang dapat memberikan kemenangan yang mutlak.

Lihat juga halaman terkait lainnya dibawah ini :
jurusqq
priaqq
hokiqq
dewaqq

norhan said...


الرائد افضل شركات تنظيف خزانات المياه يسعدنا ان نقدم لكم افضل خدمات
شركة غسيل خزانات بالمدينة المنورة تنظيف خزانات بالمدينة المنورة
افضل شركة تنظيف منازل بالمدينة المنورة شركة تنظيف بيوت بالمدينة المنورة

Florahmelda said...

Students seek professional Custom Papers Writing assistance from Top Rated Term Papers Writingcompany to accomplish any type of essay assigned to them. When you request for urgent Professional Custom Research Paper, they strive to meet your professors’ requirements.

Sankar said...

I have read your blog its very attractive and impressive. I like it your blog.
Final Year Projects for CSE in Dot Net

.Net Training in Chennai

Final Year Project Centers in Chennai

Dot Net Training in Chennai

Sam said...

Assignment help Australia offers custom and professional assignment writing help to both college and university students who are stuck with their research projects, essays, case studies, business reports and need Urgent Assignment Help.

anonymus said...

Poker online situs terbaik yang kini dapat dimainkan seperti Bandar Poker yang menyediakan beberapa situs lainnya seperti http://62.171.128.49/hondaqq/ , kemudian http://62.171.128.49/gesitqq/, http://62.171.128.49/gelangqq/, dan http://62.171.128.49/seniqq. yang paling akhir yaitu http://62.171.128.49/pokerwalet/. Jangan lupa mendaftar di panenqq

Unknown said...

peraktoto
peraktoto
peraktoto
peraktoto
peraktoto
peraktoto
peraktoto
peraktoto
peraktoto

rasheed said...



ارخص شركة شحن عفش

نقل عفش من جدة الى مكة نقل عفش من جدة الى مكة
شركة نقل عفش من جدة الى الامارات نقل عفش من جدة الى الامارات
افضل شركة نقل عفش من جدة الى الرياض نقل عفش من جدة الى الرياض
شركة نقل عفش من جدة الى الدمام نقل عفش من جدة الى الدمام
شركة نقل عفش من المدينة المنورة الى مكة نقل عفش من المدينة المنورة الى مكة


anonymus said...

shopeetoto
shopeetoto
shopeetoto
shopeetoto
shopeetoto
shopeetoto
shopeetoto
shopeetoto

Sam said...

Our experts have the knowledge, skills, and experience to help college and university students with their research papers, essays, case studies and Thesis projects. Looking for My Assignment Help or need Urgent Assignment Help? then look no further and avail our Assignment help Australia which offers the best assignment writing services in Australia.

Unknown said...

pelangiqq
pelangiqq
pelangiqq
pelangiqq
pelangiqq
pelangiqq
pelangiqq
pelangiqq

Unknown said...

http://62.171.145.61/anugerahtoto/
Togel Online
Poker Online
bandarq
Bandar Kometqq
capsa online
agen online qq
agen poker

Admin said...

Interesting post. I Have Been wondering about this issue, so thanks for posting. Pretty cool post.It ‘s really very nice and Useful post.Thanks

microsoft office Serial key full version free download

Admin said...

Interesting post. I Have Been wondering about this issue, so thanks for posting. Pretty cool post.It ‘s really very nice and Useful post.Thanks

vmware workstation pro crack

anonymus said...

https://togelhoky1.blogspot.com/
https://togelresmi8.blogspot.com/
https://togelsgphk8.blogspot.com/
https://situstogelkita.blogspot.com/
https://togelonlinejudi.blogspot.com/
https://togel2020wap.blogspot.com/