log4net에서 사용자 정의 appender를 추가하는 방법을 알아보도록 하겠습니다.
1. 먼저 xml을 아래와 같이 작성합니다.
HtmlAppender를 추가할려고 하고 있습니다.
잘 보시면 logger 파일 이름을 동적으로 주기 위해서 file value를 LogName에서 가져 오도록 했습니다.
그 다음으로 추가할 layout의 정보를 기입합니다.
2. XmlConfigurator.Configure
앞서 작성한 xml 파일을 읽습니다.
생성할 logger 파일 경로를 넘겨주기 위해서 LogName이라는 속성의 값을 먼저 설정합니다.
3. appender를 생성한후 추가합니다.
아래는 위에서 사용한 함수들입니다.
1. 먼저 xml을 아래와 같이 작성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0" encoding="utf-8" ?> <log4net> <appender name="HtmlAppender" type="log4net.Appender.FileAppender"> <file type="log4net.Util.PatternString" value="%property{LogName}" /> <appendToFile value="true" /> <datePattern value="-yyyy-MM-dd" /> <rollingStyle value="Date" /> <layout type="_7D_EPF.SimpleHtmlColoredLayout , _7D_EPF"> <conversionPattern value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> </log4net> | cs |
잘 보시면 logger 파일 이름을 동적으로 주기 위해서 file value를 LogName에서 가져 오도록 했습니다.
그 다음으로 추가할 layout의 정보를 기입합니다.
2. XmlConfigurator.Configure
앞서 작성한 xml 파일을 읽습니다.
생성할 logger 파일 경로를 넘겨주기 위해서 LogName이라는 속성의 값을 먼저 설정합니다.
1 2 3 4 5 | string sAppPath = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\\")); string sFormat = string.Format("{0,4:D4}.{1,2:D2}.{2,2:D2}.{3,2:D2}.{4,2:D2}.html", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute); m_logFileFullName = sAppPath + "\\log\\" + sFormat; log4net.GlobalContext.Properties["LogName"] = m_logFileFullName; log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.xml")); | cs |
1 2 | SetLevel(m_sLoggerName, "ALL"); AddAppender(m_sLoggerName, CreateFileAppender(AppenderName, sAppPath + "\\log\\" + sFormat)); | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | /// <summary> /// Create a new file appender /// </summary> /// <param name="name"></param> /// <param name="fileName"></param> /// <returns></returns> private log4net.Appender.IAppender CreateFileAppender(string name, string fileName) { log4net.Appender.FileAppender oAppender = new log4net.Appender.FileAppender(); oAppender.Name = name; oAppender.File = fileName; oAppender.AppendToFile = true; SimpleHtmlColoredLayout oHtmlLayout = new SimpleHtmlColoredLayout(); string[] lines = { "<html>", "<head>", "<title>7D-EPF Log Messages</title>", "<style type=\"text/css\">", "<!--", "body, table {font-family: arial,sans-serif; font-size: x-small;}", "th {background: #336699; color: #FFFFFF; text-align: left;}", "-->", "</style>", "</head>", "<body bgcolor=\"#FFFFFF\" topmargin=\"6\" leftmargin=\"6\">","<table cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">", "<tr>", "<th>DateTime</th>","<th>Thread</th>","<th>Level</th>","<th>LoggerName</th>","<th>Message</th>", "</tr>" }; oHtmlLayout.Header = string.Join("\r\n", lines) + "\r\n"; oHtmlLayout.Footer = "</table>\r\n</body>\r\n</html>"; oHtmlLayout.ActivateOptions(); oAppender.Layout = oHtmlLayout; oAppender.ActivateOptions(); return oAppender; } // Add an appender to a logger private void AddAppender(string loggerName, log4net.Appender.IAppender appender) { Log4NetLogger = log4net.LogManager.GetLogger(loggerName); log4net.Repository.Hierarchy.Logger l = (log4net.Repository.Hierarchy.Logger)Log4NetLogger.Logger; l.AddAppender(appender); } // Find a named appender already attached to a logger private static log4net.Appender.IAppender FindAppender(string appenderName) { foreach (log4net.Appender.IAppender appender in log4net.LogManager.GetRepository().GetAppenders()) { if (appender.Name == appenderName) { return appender; } return null; } } // Set the level for a named logger private void SetLevel(string loggerName, string levelName) { log4net.ILog log = log4net.LogManager.GetLogger(loggerName); log4net.Repository.Hierarchy.Logger l = (log4net.Repository.Hierarchy.Logger)log.Logger; l.Level = l.Hierarchy.LevelMap[levelName]; } | cs |
댓글
댓글 쓰기