Threadsafe filewriter

by Jesper august 07, 2009 14:55

En gang imellem kommer man ud for at man skal logge events i et multitrådet miljø. Her nytter det ikke noget bare at skrive løs i en fil, for så opstår der hurtigt låsningsproblemer.

Jeg sidder for tiden med et logningsmodul, der bruger en TextWriter som persisteringsmedie, og lige siden jeg har løftet klientapplikationen op i en multitrådet udgave, begynder jeg at få  System.IO.IOException’s når jeg sætter applikationen i gang. Det er selvfølgelig fordi alle trådene forsøger at skrive til den samme fil på samme tid. Hvordan kommer man lige uden om det?

Læser man i dokumentationen for TextWriter, står der også ganske rigtigt: Alle public static medlemmer af denne type er trådsikre, hvorimod instans medlemmer ikke er garanteret sikre.

Man kan med andre ord ikke direkte bruge i disse multitråede scenarier – man er nød til at pakke den ind i en wrapper med en lock, så man kan styre adgangen – altså synkronisere trådene.

Lige inden jeg skulle til at gå i gang med at skrive en trådsikker wrapper, fik jeg øje på en statisk metode på TextWriter: Syncronized. Det er lige nøjagtigt den wrapper, som jeg skulle til at skrive – man skal blot instantierer sin TextWriter med den:

private static TextWriter _writer =
    TextWriter.Syncronized(new StreamWriter("fil.txt", true));

Så har man en trådsikker TextWriter – uden at skrive een linie kode – Thank You MS….

Code on…

Tags:

Kommentarer

07-08-2009 20:20:14 #

Jakob Andersen

Vi skriver 2009, hvem ruller stadig sit eget logging framework når der er fremragende løsninger som f.eks. Log4net derude?

Jakob Andersen Denmark

07-08-2009 21:22:48 #

Jesper

@Jacob: Det gør jeg. Der er godt nok tale om legacykode, men jeg havde nok brugt en TextWriter til formålet alligevel. Log4net kræver flere linjer konfiguration, end min simple log-klasse totalt Smile

Jesper Denmark

14-08-2009 09:26:51 #

Kristian Erbou

Jaeh, men når man i samme hug laver sin egen implementering af log4net's ColoredConsoleAppender, så lugter det lidt af "Not Invented Here" syndrom...  ;o)

Kristian Erbou Denmark

15-08-2009 12:40:42 #

Jesper Jensen nøjes med at

Ikke: 'Not inventet here'-syndrom.
Jeg er bare udvikler, og vil udvikle. Det er forskellen på en udvikler og en bruger: Man undres over hvordan ting er skruet sammen, og kan ikke bare nøjes med at smide en dll i bin folderen.
'Udvikler syndrom' hvis det er noget.

Jesper Jensen nøjes med at Denmark

Kommentarerne er lukkede

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen | Modified by Mooglegiant

About

Mit navn er Jesper Jensen, og jeg arbejder til dagligt som web-udvikler hos DGI, hvor mit speciale er klientside applikationer. Før det var jeg nogle år i robotbranchen, hvor jeg arbejdede med 3D simulering og system koordinering. Jeg elsker webudvikling, og specielt JavaScript har min interesse. Jeg har blogget om mine oplevelser med udvikling siden 2004

Calendar

<<  september 2010  >>
mationtofr
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar

RecentComments

Comment RSS