Monday, December 7, 2015

[C# 강의 중급] 라이브러리를 만들자 03 - Log Manager 확장


C# 라이브러리를 만들자 세번째 강의입니다.
자신의 라이브러리를 구축하는 것은 프로그래머로서 재산을 축적하 것과 같다고 생각합니다.

이전 강의에서 만들었던 LogManager Class를 몇 개의 Option을 이용해서 확장해 보겠습니다.
전체 설명은 아래 YouTube를 참조하시고 코드 부분만 밑에 넣도록 하겠습니다.








BabyCarrot.Tools.LogManager
using System;
using System.IO;

namespace BabyCarrot.Tools
{
    public enum LogType { Daily, Monthly }


    public class LogManager
    {
        private string _path;


        #region Constructors
        public LogManager(string path, LogType logType, string prefix, string postfix)
        {
            _path = path;
            _SetLogPath(logType, prefix, postfix);
        }

        public LogManager(string prefix, string postfix)
            : this(Path.Combine(Application.Root, "Log"), LogType.Daily, prefix, postfix)
        {

        }

        public LogManager()
            : this(Path.Combine(Application.Root, "Log"), LogType.Daily, null, null)
        {
        }
        #endregion


        #region Methods
        private void _SetLogPath(LogType logType, string prefix, string postfix)
        {
            string path = String.Empty;
            string name = String.Empty;

            switch (logType)
            {
                case LogType.Daily:
                    path = String.Format(@"{0}\{1}\", DateTime.Now.Year, DateTime.Now.ToString("MM"));
                    name = DateTime.Now.ToString("yyyyMMdd");
                    break;
                case LogType.Monthly:
                    path = String.Format(@"{0}\", DateTime.Now.Year);
                    name = DateTime.Now.ToString("yyyyMM");
                    break;
            }

            _path = Path.Combine(_path, path);
            if (!Directory.Exists(_path))
                Directory.CreateDirectory(_path);

            if (!String.IsNullOrEmpty(prefix))
                name = prefix + name;
            if (!String.IsNullOrEmpty(postfix))
                name = name + postfix;
            name += ".txt";

            _path = Path.Combine(_path, name);
        }

        public void Write(string data)
        {
            try
            {
                using (StreamWriter writer = new StreamWriter(_path, true))
                {
                    writer.Write(data);
                }
            }
            catch (Exception ex)
            { }
        }

        public void WriteLine(string data)
        {
            try
            {
                using (StreamWriter writer = new StreamWriter(_path, true))
                {
                    writer.WriteLine(DateTime.Now.ToString("yyyyMMdd HH:mm:ss\t") + data);
                }
            }
            catch (Exception ex)
            { }
        }
        #endregion
    }
}



No comments:

Post a Comment