logging-log4net-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Radovan Raszka" <ras...@hasam.cz>
Subject RE: Problem using a ConsoleAppender in a Windows Form application
Date Fri, 26 Jun 2009 13:44:50 GMT
Hello,
try to allocate your console _before_ log4net is configured.
Radovan
________________________________

Od: Michael SALOMON [mailto:michaelsalomon78@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


Mime
View raw message