using System; using System.Collections.Generic; using System.Text; using log4net.Config; using log4net; using System.IO; using log4net.Util; using System.Reflection; using System.Collections; using System.Windows.Forms; using log4net.Appender; using System.Linq; namespace AnywhereTS { public static class Logging { static Logging() { Logging.Initialize(); } private static void Initialize() { string path = typeof(Logging).Assembly.Location.ToLower().Replace(@"\AnywhereTS.Logging.dll".ToLower(), ""); string config = string.Format(@"{0}\{1}", path, "AnywhereTS.Logging.dll.config"); //MessageBox.Show(config); FileInfo fi = new FileInfo(config); XmlConfigurator.Configure(fi); Logging.SetLogPath(string.Format(@"{0}\logs", fi.FullName)); } #region Log access public static readonly ILog ATSAdminLog = LogManager.GetLogger("AnywhereTS.ATSAmdin"); public static readonly ILog TSControlPanelLog = LogManager.GetLogger("AnywhereTS.TSControlPanel"); public static readonly ILog DatabaseLog = LogManager.GetLogger("AnywhereTS.DBSupport"); public static readonly ILog ATSAdminInstallerLog = LogManager.GetLogger("AnywhereTS.ATSAmdin.Installer"); public static readonly ILog TSControlPanelInstallerLog = LogManager.GetLogger("AnywhereTS.TSControlPanel.Installer"); public static readonly ILog WizardLog = LogManager.GetLogger("AnywhereTS.Wizard"); public static readonly ILog DefaultLog = LogManager.GetLogger("AnywhereTS.DefaultLogger"); #endregion public static void UpdateLogPath() { string path = typeof(Logging).Assembly.Location.ToLower().Replace(@"\AnywhereTS.Logging.dll".ToLower(), ""); Logging.UpdateLogPath(path); } public static void UpdateLogPath(string path) { Logging.SetLogPath(path); } private static void SetLogPath(string path) { var fileAppenders = from appender in log4net.LogManager.GetRepository().GetAppenders() where appender is FileAppender select appender; fileAppenders.Cast() .ToList() .ForEach( fa => { FileInfo fi = new FileInfo(fa.File); string file = fi.Name; fa.File = new FileInfo(string.Format(@"{0}\{1}", path, file)).FullName; fa.ActivateOptions(); } ); } #region log4net help public static List GetMessagesFromThreadContextStack(string RawContextStack) { try { ThreadContextStack tc = ThreadContext.Stacks[RawContextStack.ToUpper()]; if (tc == null) { return new List(); } else { return GetMessagesFromThreadContextStack(tc); } } catch { return new List(); } } public static List GetMessagesFromThreadContextStack(ThreadContextStack rawTCS) { Type t = typeof(ThreadContextStack); //ConstructorInfo ci = t.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[0], null); //ThreadContextStack tmpRawTCS = null; //tmpRawTCS = (ThreadContextStack)ci.Invoke(null); List stObjects = new List(); ThreadContextStack context = (rawTCS as ThreadContextStack); for (int i = 0; i < context.Count; i++) { MethodInfo mi = t.GetMethod("GetFullMessage", BindingFlags.NonPublic | BindingFlags.Instance); string message = mi.Invoke(context, null).ToString(); stObjects.Add(message); context.Pop(); } stObjects.Reverse(); rawTCS.Clear(); // push the popped Context message back onto the original ContextStack foreach (string stObject in stObjects) { rawTCS.Push(stObject); } return stObjects; } #endregion } }