Static Logger in seperate thread?

Posted by SirLenz0rlot on Stack Overflow See other posts from Stack Overflow or by SirLenz0rlot
Published on 2010-06-02T12:54:58Z Indexed on 2010/06/02 13:03 UTC
Read the original article Hit count: 224

Filed under:
|
|

Hi all,

I've made my Logger, that logs a string, a static class with a static so I can call it from my entire project without having to make an instance of it. quite nice, but I want to make it run in a seperate thread, since accessing the file costs time

is that possible somehow and what's the best way to do it?

Its a bit of a short discription, but I hope the idea is clear. if not, please let me know.

Thanks in advance!

btw: any other improvements on my code are welcome as well, i have the feeling not everthing is as efficient as it can be:

internal static class MainLogger
    {
        internal static void LogStringToFile(string logText)
        {
            DateTime timestamp = DateTime.Now;
            string str = timestamp.ToString("dd-MM-yy  HH:mm:ss ", CultureInfo.InvariantCulture) + "\t" + logText + "\n";
            const string filename = Constants.LOG_FILENAME;
            FileInfo fileInfo = new FileInfo(filename);
            if (fileInfo.Exists)
            {
                if (fileInfo.Length > Constants.LOG_FILESIZE)
                {
                    File.Create(filename).Dispose();
                }
            }
            else
            {
                File.Create(filename).Dispose();
            }
            int i = 0;
            while(true)
            {
                try
                {
                    using (StreamWriter writer = File.AppendText(filename))
                    {
                        writer.WriteLine(str);
                    }
                    break;
                }
                catch (IOException)
                {
                    Thread.Sleep(10);
                    i++;
                    if (i >= 8)
                    {
                        throw new IOException("Log file \"" + Constants.LOG_FILENAME + "\" not accessible after 5 tries");
                    }
                }
            }
        }
    }
enter code here

© Stack Overflow or respective owner

Related posts about c#

Related posts about logging