Wednesday, October 26, 2016

C# Error Logger

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ErrorLogger
{
    // ===========================================================
    public class AppLog
    {
        private string _OutputFolder;
        private string _fileName;
        //
        public AppLog(string OutputFolder,string prefix="OUTPUT")
        {
            string fileName;
            fileName = prefix + "_" + this.getUserName() + "_" + this.getJulianDate() + "_" + this.getTimeStamp() + "_" + this.getRandomNumber() + ".txt";
            _fileName=Path.Combine(OutputFolder,fileName);
            //
            _OutputFolder = OutputFolder;
        }


      /// <summary>
      /// will log error info: DateStamp,UserName and error message
      /// </summary>
      /// <param name="dateStamp"></param>
      /// <param name="UserName"></param>
      /// <param name="ErrorMsg"></param>
      /// <returns></returns>
      ///
        // ===============================================
        public string getUserName()
        {
            return Environment.UserName;
        }
        // ================================================
        public string getJulianDate()
        {
            string value;
            value = DateTime.Now.ToString("yyyyMMdd");
            return value;
        }
        // ===============================================
        public string getTimeStamp()
        {
            string rvalue;
            rvalue=DateTime.Now.ToString("HHmmss");
            return rvalue;
        }
        // ===============================================
        public string getRandomNumber()
        {
            int seed = (int)DateTime.Now.Ticks;
            Random rndNumber = new Random(seed);
            int value = rndNumber.Next(0,10000);
            string rvalue = String.Format(value.ToString(),"{0:00000}");
            return rvalue;
        }
        // ========================================================
        public bool LogEvent(DateTime dateStamp, string UserName, string ErrorMsg)
        {
            bool returnValue;
            try
            {
                string output = UserName + "," + dateStamp.ToString() + "," + ErrorMsg;
                using (StreamWriter sw = new StreamWriter(new FileStream(path: _fileName, mode: FileMode.Append, access: FileAccess.Write)))
                {
                    sw.WriteLine(output);
                }
                returnValue = true;
            }
            catch (Exception )
            {
                returnValue = false;
            }
            return returnValue;
        }
        /// <summary>
        /// wjd 4-26-2016 added overload method to capture non-fatal errors will reading the file via OpenXML
        /// </summary>
        /// <param name="dateStamp"></param>
        /// <param name="UserName"></param>
        /// <param name="ErrorMsg"></param>
        /// <param name="ValidationErrors"></param>
        /// <returns></returns>
        ///
        // ============================================================================================
        public bool LogEvent(DateTime dateStamp, string UserName, IEnumerable<string> ValidationErrors)
        {
            bool returnValue;
            try
            {
                string output = UserName + "," + dateStamp.ToString();
                using (StreamWriter sw = new StreamWriter(new FileStream(path: _fileName, mode: FileMode.Append, access: FileAccess.Write)))
                {
                    sw.WriteLine(output);
                    foreach (string validationError in ValidationErrors)
                    {
                        sw.WriteLine( validationError);
                    }
                }
                returnValue = true;
            }
            catch (Exception ex)
            {
                returnValue = false;
            }
            return returnValue;
        }
    }
}

No comments: