IT Story/C# & WPF

C#으로 만든 Log Class

Hoyami7 2019. 12. 12. 22:00
반응형

필요해서 만든건데 용도에 따라 수정하여 쓰시거나, 참고용으로 하시면 될 것 같네요.

 

별다른 기능없이 Log 파일 분류해서 남기는 기능만 있으니 보시거나 수정하기에 나쁘지 않을거에요.

 

문의하실 거 있으시면 답글 달아 주세요.

 

namespace ComServer
{
    #region Enum

    public enum MSGLOGTYPE
    {
        EQCIM = 1,
        SYSTEM = 2,
        FDC = 3,
        SYSTEMERROR = 4,
        ETC = 5,
        HSMS = 6,

    }

    #endregion

    /// <summary>
    /// 2017.05.08 CBH Last Edit
    /// </summary>
     static class clsMSGLOG
    {

        public delegate void LOG_UIVIEW_Event(MSGLOGTYPE TYPE, string DATA);
        static public event LOG_UIVIEW_Event OnLOG_VIEW = null;

        static private int keepDay;
        static private string LOG_PATH = @"";
        static private bool bLOG_Thread = true;
        static private Queue Queue_LOG = new Queue();
        static private Thread threadWrite;
        static private clsLOG_PATH PATH;


        
  

        /// <summary>
        /// 실제로 LOG를 File Write 를 처리하는 Thread 함수
        /// </summary>
        static private void threadLOGFileWrite()
        {
            string _DirPath = string.Empty;
            string _FilePath = string.Empty;
            string Trace_FilePath = string.Empty;

            clsLOGMsg clsMSG = null;

            while (bLOG_Thread == true)
            {
                try
                {

                    clsMSG = null;

                    lock (Queue_LOG.SyncRoot)
                    {
                        if (Queue_LOG.Count > 0)
                        {
                            clsMSG = (clsLOGMsg)Queue_LOG.Dequeue();
                        }
                    }


                    if (clsMSG != null)
                    {
                        _FilePath = String.Format("{0:HH}", DateTime.Now) + ".log";
                        MakeFolder();//경로 유무 확인

                        _FilePath = clsMSG.LogType + "_" + _FilePath;
                        _DirPath = PATH.LOG_TYPE_PATH.Where(C => C.Key == clsMSG.LogType).FirstOrDefault().Value;

                        if (_DirPath != null)
                        {
                            //해당 경로에 파일 존재 유무 확인
                            if (File.Exists(_DirPath + _FilePath) == true)
                            {
                                using (StreamWriter sw = new StreamWriter(_DirPath + _FilePath, true))
                                {
                                    sw.WriteLine(clsMSG.EventTime + "\t" + clsMSG.LOGDATA);
                                    sw.Close();
                                }
                            }
                            else
                            {
                                using (StreamWriter sw = File.CreateText(_DirPath + _FilePath))
                                {
                                    sw.WriteLine(clsMSG.EventTime + "\t" + clsMSG.LOGDATA);
                                    sw.Close();
                                }
                            }
                        }

                    }

                    //Application.DoEvents();
                    Thread.Sleep(10);

                }
                catch (ThreadAbortException)
                {

                }
                catch { }
            }
        }

        /// <summary>
        /// LOG를 기록하기 위한 함수
        /// </summary>
        /// <param name="_LOGTYPE">LOGTYPE[ENUM]</param>
        /// <param name="_DATA">LOG VALUE</param>
        /// <param name="_ONLY_UI">Log Display 처리 유무</param>
        /// <param name="_FILE_WRITE">File Write 유무</param>
        static public void SetLOG(MSGLOGTYPE _LOGTYPE, string _DATA, bool _ONLY_UI = true, bool _FILE_WRITE = true)
        {
            clsLOGMsg clsLOGMsg = new clsLOGMsg();
            clsLOGMsg.LogType = _LOGTYPE.ToString();
            clsLOGMsg.EventTime = "[" + String.Format("{0:HH:mm:ss.fff}" + "]\t", DateTime.Now).Trim();
            clsLOGMsg.LOGDATA = _DATA.Trim();

            try
            {
                if (_FILE_WRITE)
                {
                    //File Write Queue 에 적재
                    lock (Queue_LOG.SyncRoot)
                    {
                        Queue_LOG.Enqueue(clsLOGMsg);    //LOG File Save 용
                    }
                }

                if (_ONLY_UI)
                {
                    if (OnLOG_VIEW != null)
                    {
                        OnLOG_VIEW(_LOGTYPE, _DATA);
                    }
                }

                clsLOGMsg = null;
            }
            catch
            {
                //m_Info.LOG.SetLOG((int)m_Enum.LOGTYPE.SYSTEMERROR, "SetLOG() ERROR \n ex) : " + ex.ToString());
            }
        }

        

        #endregion

    }
}
반응형