using System; using System.Diagnostics; using System.Globalization; using System.Threading; using System.Text; using log4net; using log4net.Config; namespace com.itac.mes.tools { public class LogHandler { private static Object lockObject = new Object(); protected static readonly ILog logger = LogManager.GetLogger(Constants.LOGGER); private static TraceSource ts = new TraceSource(Constants.SERVICE_NAME, SourceLevels.All); static LogHandler() { XmlConfigurator.Configure(); } public static void addListener(TraceListener listener) { ts.Listeners.Add(listener); } public static void log(String loggerName, TraceEventType level, String message) { log(loggerName, level, message, null); } public static void log(String loggerName, TraceEventType level, String message, Exception e) { // alles wird geloggt, aber nur Error und Fatal an die TraceSource weiter gereicht try { lock (lockObject) { switch (level) { case TraceEventType.Critical: ts.TraceEvent(level, 10, message); ts.Flush(); logger.Fatal(message, e); break; case TraceEventType.Error: ts.TraceEvent(level, 10, message); ts.Flush(); logger.Error(message, e); break; case TraceEventType.Information: logger.Info(message, e); break; case TraceEventType.Verbose: logger.Debug(message, e); break; case TraceEventType.Warning: logger.Warn(message, e); break; default: logger.Info(message, e); ts.TraceEvent(level, 10, message); ts.Flush(); break; } } } catch (ThreadInterruptedException) { } } } }