Cześć.
Tak się zastanawiam...
Mam dość sporawą listę obiektów, każdy obiekt - są tego samego typu - podnosi event, aby logować jakąś treść do - być może tego samego - pliku.
No i jak by tu tego loggera bezpiecznie zaimplementować?
Cześć.
Tak się zastanawiam...
Mam dość sporawą listę obiektów, każdy obiekt - są tego samego typu - podnosi event, aby logować jakąś treść do - być może tego samego - pliku.
No i jak by tu tego loggera bezpiecznie zaimplementować?
Użyć NLoga?
Póki co raczkuję i chciałbym to manualnie zaimplementować...
Aczkolwiek dzięki, dobrze wiedzieć, że profesjonalnie można użyć takiej libki.
Nie musi to być best way, najlepiej jakieś proste do zrozumienia rozwiązanie.
Zadanie chyba było łatwe, o ile testy dobrze zrobiłem... Zerkniecie czy może być?
public static class SafeLogger
{
private static readonly object locker = new object();
public static void Log(string path, string message)
{
lock(locker)
{
using (var stream = new FileStream(path, FileMode.Append, FileAccess.Write))
using (var writer = new StreamWriter(stream))
writer.WriteLine(message);
}
}
}
Testy (są jakie są xD):
Task.Run(() =>
{
for (int i = 0; i < 5; i++) SafeLogger.Log(@"SCIEZKA", "" + i);
});
Task.Run(() =>
{
for (int i = 0; i < 5; i++) SafeLogger.Log(@"SCIEZKA", "" + i);
});
Console.ReadKey();
To tu nie chodziło o asynchroniczność, tylko o synchroniczość najwidoczniej : D
Poznałem konstrukcję lock dopiero teraz, także nie wypadłem na to.
@furious programming: Ach :)
Dla każdej ścieżki będę go instancjonował, ponieważ zauważyłem, że czeka bezsensu, jeśli zapisuje do innego pliku.
A tak to chyba jestem zadowolony póki co.