Hi !! I truely apologize for this late answer!
This works great for me !! Thanks so much for your help, log4net definitely rocks ! Regards michael On Sat, Jun 27, 2009 at 2:06 AM, Ron Grabowski <rongrabow...@yahoo.com>wrote: > This works for me: > > public partial class Form1 : Form > { > [DllImport("kernel32.dll", SetLastError = true)] > [return: MarshalAs(UnmanagedType.Bool)] > static extern bool AllocConsole(); > > [DllImport("kernel32.dll", SetLastError = true)] > private static extern bool AttachConsole(int dwProcessId); > > public Form1() > { > InitializeComponent(); > > if (AllocConsole()) > AttachConsole(-1); > > var appender = new ColoredConsoleAppender(); > var mapping = new ColoredConsoleAppender.LevelColors > { > Level = Level.Debug, > ForeColor = ColoredConsoleAppender.Colors.Red, > BackColor = ColoredConsoleAppender.Colors.Blue > }; > appender.AddMapping(mapping); > appender.ActivateOptions(); > appender.Layout = new SimpleLayout(); > BasicConfigurator.Configure(appender); > > ILog log = LogManager.GetLogger(typeof(Form1)); > log.Debug("Hello World"); > } > } > > ------------------------------ > *From:* Michael SALOMON <michaelsalomo...@gmail.com> > *To:* Log4NET User <log4net-user@logging.apache.org> > *Sent:* Friday, June 26, 2009 1:18:49 PM > *Subject:* Re: Problem using a ConsoleAppender in a Windows Form > application > > Well, I tried this and it still does not work: > > > if (AllocConsole()) > AttachConsole(-1); > > // this file exists.... > XmlConfigurator.ConfigureAndWatch(new > System.IO.FileInfo("./Log4Net.config")); > > LogManager.GetLogger("DebugLogger").Debug("message"); > > My config file: > <?xml version="1.0" encoding="utf-8" ?> > <log4net> > <appender name="DebugConsoleAppender" > type="log4net.Appender.ColoredConsoleAppender"> > <threshold value="ALL"/> > <mapping> > <level value="FATAL" /> > <foreColor value="White" /> > <backColor value="Red, HighIntensity" /> > </mapping> > <mapping> > <level value="ERROR" /> > <backColor value="Red, HighIntensity" /> > </mapping> > <mapping> > <level value="WARN" /> > <backColor value="Yellow, HighIntensity" /> > </mapping> > <mapping> > <level value="DEBUG" /> > <backColor value="Green" /> > </mapping> > <mapping> > <level value="INFO" /> > <foreColor value="White" /> > </mapping> > <layout type="log4net.Layout.PatternLayout"> > <conversionPattern value="%ndc %date %-4timestamp %-5level - %message > %newline%exception " /> > </layout> > </appender> > > <root> > <level value="ALL" /> > </root> > > <logger name="DebugLogger"> > <level value="ALL"/> > <appender-ref ref="DebugConsoleAppender"/> > </logger> > > </log4net> > > > Thanks for your help ! > > Michael > 2009/6/26 Michael SALOMON <michaelsalomo...@gmail.com> > >> thx for your answer ! i'll try that but then I need to change my approach. >> >> Originally I wanted to attach a console depending on log4net config, so >> now i will try to detach the console depending on the config ;) >> >> I don't mind doing that >> >> I'll let you know if it works. >> >> 2009/6/26 Radovan Raszka <ras...@hasam.cz> >> >> Hello, >>> try to allocate your console _before_ log4net is configured. >>> Radovan >>> ------------------------------ >>> *Od:* Michael SALOMON [mailto:michaelsalomo...@gmail.com] >>> *Odesláno:* 26. června 2009 15:22 >>> *Komu:* log4net-user@logging.apache.org >>> *Předmět:* Problem using a ConsoleAppender in a Windows Form application >>> >>> Hi ! >>> >>> I'm using log4net 1.2.10.0 and .NET 2.0 >>> >>> I wrote a Windows Form application and I want to be able to log debug >>> messages in a ColoredConsoleAppender (or whatever type of Console appender). >>> >>> If I compile my application as a Console Application, this works fine... >>> If I compile it as a Windows Forms application, then I understand that no >>> console is attached to my application, fair enough.. >>> >>> In this case I programmaticaly attach a brand new console by using this >>> piece of code : >>> >>> [DllImport("kernel32.dll", SetLastError = true)] >>> [return: MarshalAs(UnmanagedType.Bool)] >>> static extern bool AllocConsole(); >>> >>> [DllImport("kernel32.dll", SetLastError = true)] >>> [return: MarshalAs(UnmanagedType.Bool)] >>> static extern bool FreeConsole(); >>> >>> [DllImport("kernel32.dll", SetLastError = true)] >>> private static extern bool AttachConsole(int dwProcessId); >>> >>> public static void SetConsole() >>> { >>> foreach (log4net.Appender.IAppender appender in >>> log4net.LogManager.GetRepository().GetAppenders()) >>> { >>> System.Type type = appender.GetType(); >>> >>> if ((type == >>> typeof(log4net.Appender.ColoredConsoleAppender)) >>> || (type == >>> typeof(log4net.Appender.ConsoleAppender))) >>> { >>> if (AllocConsole()) >>> AttachConsole(-1); >>> >>> return; >>> } >>> } >>> >>> So at startup, if any console appender is found, I attach a console... >>> >>> At this stage, I can do things like : Console.WriteLine() , and it works >>> very fine, I can see the messages in my new console... >>> >>> But for some reason, the Console Appenders do not forward their messages >>> to this console... >>> >>> Do I miss something or do something wrong ? >>> >>> I tried to create a custom appender that inherits ConsoleAppender and do >>> something like: >>> >>> protected override void Append (LoggingEvent loggingEvent) >>> { >>> Console.WriteLine (RenderLoggingEvent(loggingEvent); >>> } >>> >>> This works fine with my attached console, but I loose all the nice >>> colored features... And fact is I do want them :) >>> >>> Thanks a lot for your help >>> >>> Michael >>> >> >> >