ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C#으로 만든 Log Class
    IT Story/C# & WPF 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
    
        }
    }
    반응형

    'IT Story > C# & WPF' 카테고리의 다른 글

    WPF page Navigation like in MVC  (0) 2019.12.25
    WPF ComboBox control  (0) 2019.12.25
    C# Tree, XML로 Save & Load  (0) 2019.12.12
    C# & Find All Application Errors  (0) 2019.12.12
    How to create REST service  (0) 2019.12.12

    댓글

Designed by Tistory.