-
C#으로 만든 Log ClassIT 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