Merge branch 'master' of https://code.grnet.gr/git/pithos-ms-client
authorpkanavos <pkanavos@gmail.com>
Mon, 23 Apr 2012 21:31:22 +0000 (00:31 +0300)
committerpkanavos <pkanavos@gmail.com>
Mon, 23 Apr 2012 21:31:22 +0000 (00:31 +0300)
trunk/Pithos.Client.WPF/Diagnostics/log4netForwarder.cs [new file with mode: 0644]
trunk/Pithos.Client.WPF/Pithos.Client.WPF.csproj
trunk/Pithos.Client.WPF/app.config

diff --git a/trunk/Pithos.Client.WPF/Diagnostics/log4netForwarder.cs b/trunk/Pithos.Client.WPF/Diagnostics/log4netForwarder.cs
new file mode 100644 (file)
index 0000000..badfa48
--- /dev/null
@@ -0,0 +1,132 @@
+using System;
+using System.Diagnostics;
+using System.Text;
+using log4net;
+using log4net.Core;
+
+namespace Pithos.Client.WPF.Diagnostics
+{
+    public class Log4NetForwarder : TraceListener
+    {
+        public override void Write(string message)
+        {
+            WriteLine(message);
+        }
+
+        public override void Write(object o)
+        {
+            WriteLine(o);
+        }
+
+        public override void Write(object o, string category)
+        {
+            WriteLine(o, category);
+        }
+
+        public override void Write(string message, string category)
+        {
+            WriteLine(message, category);
+        }
+
+        public override void WriteLine(string message)
+        {
+            Log(message, Level.Debug);
+        }
+
+
+        public override void WriteLine(object o)
+        {
+            Log(o.ToString(), Level.Debug);
+        }
+
+        public override void WriteLine(object o, string category)
+        {
+            using (ThreadContext.Stacks["Category"].Push(category))
+            {
+                Log(o.ToString(), Level.Debug);
+            }
+        }
+
+        public override void WriteLine(string message, string category)
+        {
+            using (ThreadContext.Stacks["Category"].Push(category))
+            {
+                Log(message, Level.Debug);
+            }
+        }
+
+        public override void Fail(string message)
+        {
+            Log(message, Level.Error);
+        }
+
+        public override void Fail(string message, string detailMessage)
+        {
+            Log(String.Format("{0} {1}", message, detailMessage), Level.Error);
+        }
+
+
+
+        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id)
+        {
+            var message = String.Format("Event ID: [{0}]", id);
+            Log(source, eventType, message);
+        }
+
+        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args)
+        {
+            var builder = new StringBuilder();
+            builder.AppendFormat("Event ID: [{0}] ", id);
+            builder.AppendFormat(format, args);
+            var message = builder.ToString();
+
+            Log(source, eventType, message);
+        }
+
+        public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)
+        {
+            Log(source, eventType, message);
+        }
+
+        private void Log(string source, TraceEventType eventType, string message)
+        {
+            var log = LogManager.GetLogger(source);
+            var level = GetLevel(eventType);
+            log.Logger.Log(GetType(), level, message, null);
+        }
+
+        private void Log(string message, Level level)
+        {
+            var stack = new StackTrace();
+            var type = stack.GetFrame(0).GetMethod().DeclaringType;
+            var log = LogManager.GetLogger(type);
+            log.Logger.Log(GetType(), level, message, null);
+        }
+
+
+        private static Level GetLevel(TraceEventType eventType)
+        {
+            var level = Level.Debug;
+            switch (eventType)
+            {
+                case TraceEventType.Information:
+                    level = Level.Info;
+                    break;
+                case TraceEventType.Verbose:
+                    level = Level.Verbose;
+                    break;
+                case TraceEventType.Warning:
+                    level = Level.Warn;
+                    break;
+                case TraceEventType.Critical:
+                    level = Level.Critical;
+                    break;
+                case TraceEventType.Error:
+                    level = Level.Error;
+                    break;
+            }
+            return level;
+        }
+    }
+
+}
index 2968e76..fa1c752 100644 (file)
     <Compile Include="Converters\EnumTypeConverter.cs" />
     <Compile Include="Converters\NullToVisibilityConverter.cs" />
     <Compile Include="Converters\SingleLineConverter.cs" />
+    <Compile Include="Diagnostics\log4netForwarder.cs" />
     <Compile Include="FileProperties\ConflictsView.xaml.cs">
       <DependentUpon>ConflictsView.xaml</DependentUpon>
     </Compile>
   <ItemGroup>
     <Resource Include="Images\pithos_logo-icon.ico" />
   </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
index dda7245..97a0b24 100644 (file)
                        </listeners>
                </trace>
        </system.diagnostics>-->
+  <system.diagnostics >
+    <sources >
+      <source name="System.Net"  switchValue="Verbose" tracemode="protocolonly" maxdatasize="65536" >
+        <listeners>
+          <add name="ms" type="Pithos.Client.WPF.Diagnostics.Log4NetForwarder,PithosPlus"/>
+        </listeners>
+      </source>
+    </sources>
+  </system.diagnostics>
   <userSettings>
     <Pithos.Client.WPF.Properties.Settings>
       <setting name="PithosPath" serializeAs="String">