using System; using System.Diagnostics; namespace Log { #region Log namespace Log { public class ParameterCountMismatchArgumentCountException : Exception { public ParameterCountMismatchArgumentCountException() : base() { } public ParameterCountMismatchArgumentCountException(string message) : base(message) { } } public class Log : Microsoft.VisualBasic.Logging.Log, IDisposable { public Log() : base() { if (!string.IsNullOrEmpty(System.Configuration.ConfigurationManager.AppSettings["LogPath"])) { string LogPath = System.Configuration.ConfigurationManager.AppSettings["LogPath"]; string LogName = System.Reflection.Assembly.GetCallingAssembly().GetName().Name; DefaultFileLogWriter.CustomLocation = System.IO.Path.GetDirectoryName(LogPath); DefaultFileLogWriter.BaseFileName = LogName; DefaultFileLogWriter.Location = Microsoft.VisualBasic.Logging.LogFileLocation.Custom; DefaultFileLogWriter.CustomLocation = LogPath; } else if (System.Reflection.Assembly.GetEntryAssembly() != null) { DefaultFileLogWriter.Location = Microsoft.VisualBasic.Logging.LogFileLocation.ExecutableDirectory; } DefaultFileLogWriter.Append = true; DefaultFileLogWriter.AutoFlush = true; DefaultFileLogWriter.Delimiter = ";"; DefaultFileLogWriter.MaxFileSize = 2621440000; //2500 MB DefaultFileLogWriter.ReserveDiskSpace = 1048576000; //1000 MB DefaultFileLogWriter.LogFileCreationSchedule = Microsoft.VisualBasic.Logging.LogFileCreationScheduleOption.Daily; if (System.Configuration.ConfigurationManager.AppSettings["Debug"] == "true") TraceSource.Switch.Level = SourceLevels.All; else TraceSource.Switch.Level = SourceLevels.Information; WriteEntry("Starting log..."); WriteEntry("Log instance created"); } public Log(string name) : this() { DefaultFileLogWriter.BaseFileName = name; } public Log(string name, string logPath, SourceLevels level) : this() { DefaultFileLogWriter.CustomLocation = System.IO.Path.GetDirectoryName(logPath); DefaultFileLogWriter.BaseFileName = name; DefaultFileLogWriter.Location = Microsoft.VisualBasic.Logging.LogFileLocation.Custom; DefaultFileLogWriter.CustomLocation = logPath; DefaultFileLogWriter.Append = true; DefaultFileLogWriter.AutoFlush = true; DefaultFileLogWriter.Delimiter = ";"; DefaultFileLogWriter.MaxFileSize = 2621440000; //2500 MB DefaultFileLogWriter.ReserveDiskSpace = 1048576000; //1000 MB DefaultFileLogWriter.LogFileCreationSchedule = Microsoft.VisualBasic.Logging.LogFileCreationScheduleOption.Daily; TraceSource.Switch.Level = level; WriteEntry("Starting log..."); WriteEntry("Log instance created"); } public void Dispose() { WriteEntry("Log Class gets disposed."); WriteEntry("Closing log..."); DefaultFileLogWriter.Close(); } public void WriteFunctionEntry() { string message = string.Empty; string callingMethod = new StackFrame(1, true).GetMethod().Name; string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; message = string.Format("{0} : {1}(", callingClass, callingMethod); System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) { message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name + ", "; } //remove the "," at the end of the line if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } message += ") : entering..."; WriteEntry(message, TraceEventType.Verbose); } public void WriteFunctionEntry(params object[] args) { string message = string.Empty; string callingMethod = new StackFrame(1, true).GetMethod().Name; string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; message = string.Format("{0} : {1}(", callingClass, callingMethod); System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); if (parameterInfos.Length != args.Length) { throw new ParameterCountMismatchArgumentCountException(); } int parameterIterator = 0; foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) { message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name; message += string.Format("={0}, ", args[parameterIterator] != null ? args[parameterIterator].ToString() : "null"); parameterIterator++; } //remove the "," at the end of the line if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } message += ") : entering..."; WriteEntry(message, TraceEventType.Verbose); } public void WriteFunctionExit() { string message = string.Empty; string callingMethod = new StackFrame(1, true).GetMethod().Name; string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; message = string.Format("{0} : {1}(", callingClass, callingMethod); System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) { message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name + ", "; } //remove the "," at the end of the line if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } message += ") : leaving..."; WriteEntry(message, TraceEventType.Verbose); } public void WriteFunctionExit(object returnValue) { string message = string.Empty; string callingMethod = new StackFrame(1, true).GetMethod().Name; string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; message = string.Format("{0} : {1}(", callingClass, callingMethod); System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) { message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name + ", "; } //remove the "," at the end of the line if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } message += ") : leaving... ReturnValue is " + returnValue.ToString(); WriteEntry(message, TraceEventType.Verbose); } public void WriteFunctionExitWithError(Exception ex) { string message = string.Empty; string error = ex.GetType().Name; if (!string.IsNullOrEmpty(error)) { error += ": " + ex.Message; } string callingMethod = new StackFrame(1, true).GetMethod().Name; string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; message = string.Format("{0} : {1}(", callingClass, callingMethod); System.Reflection.ParameterInfo[] parameterInfos = new StackFrame(1, true).GetMethod().GetParameters(); foreach (System.Reflection.ParameterInfo parameterInfo in parameterInfos) { message += parameterInfo.ParameterType.Name + " " + parameterInfo.Name + ", "; } //remove the "," at the end of the line if (message.EndsWith(", ")) { message = message.Substring(0, message.Length - 2); } message += ") : leaving with error '" + error + "'"; WriteEntry(message, TraceEventType.Error); } private new void WriteEntry(string message, TraceEventType severity) { message = string.Format("{0}:{1}:{2}.{3};{4}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond, message); base.WriteEntry(message, severity); } private new void WriteEntry(string message) { WriteEntry(message, TraceEventType.Information); } public void WriteEntry(string message, TraceEventType severity, params object[] args) { string callingMethod = new StackFrame(1, true).GetMethod().Name; string callingClass = new StackFrame(1, true).GetMethod().ReflectedType.Name; message = string.Format(message, args); string messageHeader = string.Format("{0} : {1}", callingClass, callingMethod); message = string.Format("{0};{1}", messageHeader, message); WriteEntry(message, severity); } private void WriteEntry(string message, params object[] args) { message = string.Format(message, args); WriteEntry(message, TraceEventType.Information); } } } #endregion Log }