I saw this on Windows XP.

> -----Original Message-----
> From: Nicko Cadell [mailto:[EMAIL PROTECTED]
> Sent: Friday, January 28, 2005 2:50 PM
> To: Log4NET Dev
> Subject: RE: Patch to allow large messages to be logged via
> ColoredConsoleAppender
> 
> I will keep an eye out for weird behaviour in my testing.
> What OS platform have you seen this behaviour on?
> 
> Cheers,
> Nicko
> 
> > -----Original Message-----
> > From: Wesley Smith [mailto:[EMAIL PROTECTED]
> > Sent: 28 January 2005 22:45
> > To: Log4NET Dev
> > Subject: RE: Patch to allow large messages to be logged via
> > ColoredConsoleAppender
> >
> > From the documentation, I thought that 31999 characters would
> > work too, but I found that it didn't always work. At least
> > with my test case, if the first call to WriteConsoleW is
> > smaller than 26000ish, then you can call it subsequent times
> > with up to 31999 chars, but if the first call is with
> > anything > 26000ish, then it prints nothing (for example,
> > passing 30000 characters to the first call of WriteConsoleW
> > doesn't print anything - at least in my test it didn't).
> >
> > I don't understand this behavior, and hope that you can come
> > up with something more reasonable and understandable - just
> > wanted to warn you to be on the lookout for this weird behavior.
> >
> >
> >
> > > -----Original Message-----
> > > From: Nicko Cadell [mailto:[EMAIL PROTECTED]
> > > Sent: Friday, January 28, 2005 2:35 PM
> > > To: Log4NET Dev
> > > Subject: RE: Patch to allow large messages to be logged via
> > > ColoredConsoleAppender
> > >
> > > It looks like the buffer passed to WriteConsoleW is limited
> > to 64KB,
> > > i.e. 32000 WCHARs less 1 for the NULL if the P/Invoke marshalling
> > feels
> > > like putting one on the end of the string.
> > >
> > > I will update the appender along the lines of your patch.
> > >
> > >
> > > Thanks,
> > > Nicko
> > >
> > > > -----Original Message-----
> > > > From: Wesley Smith [mailto:[EMAIL PROTECTED]
> > > > Sent: 27 January 2005 20:03
> > > > To: log4net-dev@logging.apache.org
> > > > Subject: Patch to allow large messages to be logged via
> > > > ColoredConsoleAppender
> > > >
> > > > I found that if you attempt to log a message of more than about
> > > > 26000 characters, ColoredConsoleAppender will not log the
message
> > > > (no error, just silently eats the message).  One possible fix
for
> > > > the problem is given in the patch below:
> > > >
> > > >
> > > > ---
> > C:\TEMP\log4net-1.2.0-beta8\src\Appender\ColoredConsoleAppender.cs
> > > > Mon Jul 07 01:05:02 2003
> > > > +++ C:\Program
> > > > Files\log4net\log4net-1.2.0-beta8\src\Appender\ColoredConsoleA
> > > > ppender.cs
> > > > Wed Jan 26 12:57:22 2005
> > > > @@ -280,13 +280,32 @@
> > > >
> > > >                         string strLoggingMessage =
> > > > RenderLoggingEvent(loggingEvent);
> > > >
> > > > -                       // write the output.
> > > >                         UInt32 uiWritten = 0;
> > > > +
> > > > +                       // WriteConsoleW can only handle a
limited
> > > > number of characters at a time
> > > > +                       // and emperically, 26000 is about
right.
> > > > +                       const int maxChunkSize = 26000;
> > > > +                       while (strLoggingMessage.Length >
maxChunkSize)
> > > > +                       {
> > > > +                               string firstPart =
> > > > strLoggingMessage.Substring(0, maxChunkSize);
> > > > +                               WriteConsoleW(  iConsoleHandle,
> > > > +                                       firstPart,
> > > > +
(UInt32)firstPart.Length,
> > > > +                                       out (UInt32)uiWritten,
> > > > +                                       IntPtr.Zero);
> > > > +
> > > > +                               // Remove the characters already
output
> > > > from strLoggingMessage
> > > > +                               strLoggingMessage =
> > > > strLoggingMessage.Substring(maxChunkSize);
> > > > +
> > > > +                       }
> > > > +                       // write the remaining output.
> > > > +
> > > >                         WriteConsoleW(  iConsoleHandle,
> > > >
> > > > strLoggingMessage,
> > > >
> > > > (UInt32)strLoggingMessage.Length,
> > > >                                                         out
> > > > (UInt32)uiWritten,
> > > >
IntPtr.Zero);
> > > > +
> > > >                 }
> > > >
> > > >                 /// <summary>
> > > >
> >

Reply via email to