¿Como crear una clase para logs(bitacora) en C#?

Comparto una clase la cual sirve para crear logs de manera fácil y dinámica.
La clase crea un archivo el cual va siendo llenado por cadenas, cada mensaje es guardado en un archivo por día y al mensaje guardado se le anexa la hora en la cual fue creado.

  public class Log 
    {
        #region Private Attributes
        private string folder = "";
        private string path = "";
        protected string BRINCO = "\n";
        protected List<string> lErrores = new List<string>();
        
        #endregion
        #region Propierties
        public string FullPath
        {
            get { return path + "/" + folder; }
        }
        #endregion

        public Log(string folder_,string path)
        {
            folder = folder_;
            this.path = path;
        }


        public bool Add(string sLog)
        {
            try
            {
                clearErrores();

                //verificamos si existe directorio
                if (!CreateDirectory()) return false;

                string nombreArchivo = GetNameFile();//obtenemos nombre de archivo del día
                string cadena = ""; //obtenemos el contenido del archivo


                cadena += DateTime.Now + " - " + sLog + Environment.NewLine;

                //creamos el archivo y guardamos
                StreamWriter sw = new StreamWriter(FullPath + "/" + nombreArchivo, true);
                sw.Write(cadena);
                sw.Close();

                return true;

            }
            catch (DirectoryNotFoundException ex)
            {
                addError("Directorio invalido: " + FullPath);
                return false;
            }
            catch (FileNotFoundException ex)
            {
                addError("Ruta de archivo invalida");
                return false;
            }
            catch (Exception ex)
            {

                addError("Error: " + ex.Message);
                return false;
            }
        }



        #region Helpers

        private string GetNameFile()
        {
            string nombre = "";
            nombre = "log_" + DateTime.Now.Day + "_" + DateTime.Now.Month + "_" + DateTime.Now.Year + ".txt";

            return nombre;
        }

        private bool CreateDirectory()
        {
            try
            {
                //si no existe el directorio lo creamos
                if (!Directory.Exists(FullPath))
                    Directory.CreateDirectory(FullPath);

                return true;

            }
            catch (DirectoryNotFoundException ex)
            {
                addError("Directorio invalido: " + FullPath);
                return false;
            }
        }
      
        
        public void addError(string error)
        {
            lErrores.Add(error);
        }
      
        public string getErrores()
        {
            string error = "";
            foreach (string err in lErrores)
            {
                error += err + BRINCO;
            }
            return error;
        }

        protected void clearErrores()
        {
            lErrores = new List<string>();
        }
        #endregion
    }

Se utiliza de la siguiente manera:

  string path = HttpContext.Current.Request.MapPath("~");
  Logs.Log oLog = new Logs.Log("Logs/", path);
  oLog.Add("Hola paso algo");

About

Desarrollador de software, lector compulsivo.

View all posts by