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
}
}
반응형