initial commit
[CPE_learningsite] / CPE / CPE.Utilities / LogWrapper.cs
1 ´╗┐using System;
2 using System.Diagnostics;
3 using System.Threading.Tasks;
4 using log4net;
5
6 namespace CPE.Utilities
7 {
8     /// <summary>
9     /// Wrapper for Log4Net - uses SerialKey and Calling Class and Method.
10     /// NOTE: Uses Asynchronous logging
11     /// </summary>
12     public static class LogWrapper
13     {
14         //Methods in Descending order of importance
15         public static void Debug(string message, params object[] parameters)
16         {
17             string format;
18             var logger = FormatMessage(message, parameters, out format);
19             Task.Run(() => logger.DebugFormat(format));
20         }
21         public static void Info(string message, params object[] parameters)
22         {
23             string format;
24             var logger = FormatMessage(message, parameters, out format);
25             Task.Run(() => logger.InfoFormat(format));
26         }
27         public static void Warn(string message, params object[] parameters)
28         {
29             string format;
30             var logger = FormatMessage(message, parameters, out format);
31             //logger.WarnFormat(format);
32             Task.Run(() => logger.WarnFormat(format));
33         }
34         public static void Error(string message, params object[] parameters)
35         {
36             string format;
37             var logger = FormatMessage(message, parameters, out format);
38             Task.Run(() => logger.ErrorFormat(format));
39         }
40         public static void Fatal(string message, params object[] parameters)
41         {
42             string format;
43             var logger = FormatMessage(message, parameters, out format);
44             Task.Run(() => logger.FatalFormat(format));
45         }
46
47         private static ILog FormatMessage(string message, object[] parameters, out string format)
48         {
49             var frame = new StackFrame(2);
50             var method = frame.GetMethod();
51             var className = "";
52             try
53             {
54                 className = method.DeclaringType.ToString();
55             }
56             catch { }
57             var methodName = method.Name;
58             var logger = LogManager.GetLogger(className); //should be cached if exists already
59             var parsedMsg = "";
60             try
61             {
62                 parsedMsg = string.Format(message, parameters);
63             }
64             catch (Exception)
65             {
66                 //developer sent invalid string
67                 parsedMsg = "_String parse error.";
68             }
69             System.IO.File.AppendAllText(@"D:\Log_files\CpeApi_SimpleLogger.log", "[LogWrapper][FormatMessage] " + DateTime.UtcNow.ToString("yyyyMMdd_HHmmss") + "] " + methodName + parsedMsg + Environment.NewLine);
70             format = string.Format("[{0}] ; {1}", methodName, parsedMsg);
71             return logger;
72         }
73     }
74 }