You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by Ma...@integris.co.uk on 2001/11/15 20:30:51 UTC

WriterAppender problem

Can anyone find the problem here?


I have a writer appender that writes to a bytearrayoutputstream.
I have a bytearrayinputstream wrapped in a bufferedreader that reads the
logged message from the stream once it has been logged.
However, my stream is empty, or at least the string conversion returns
null.

My code is :

BufferedWriter outputStream = setup.getOutStream();

cat = (AuditCategory) AuditCategory.getInstance(classFQN);

PatternLayout logLayout = new PatternLayout();

ConsoleAppender consoleApp = new ConsoleAppender(logLayout);
WriterAppender writerApp = new WriterAppender(logLayout, outputStream);

consoleApp.setThreshold(AuditLogPriority.DEBUG)
writerApp.setThreshold(AuditLogPriority.AUDIT);

cat.addAppender(consoleApp);
cat.addAppender(writerApp);

To setup the category with the correct appenders.

Then:

public void audit(java.lang.Object message) {
    System.out.println("message in audit method = " + message.toString());
    cat.audit(message);
    sendJmsMessage();
  }

  private void sendJmsMessage() {


    ByteArrayInputStream byteIn = setup.getInStream();

    BufferedReader myInput = new BufferedReader ( new InputStreamReader(byteIn) );

    try {System.out.println(myInput.readLine());}  // !!!!!!!!This returns null here!!!!!!!!!
    catch (Exception e){}

    String message = new String();

    try {
      // read the now characters and convert to string
      message = myInput.readLine();
    }
    catch (IOException e) {
      System.out.println ("Exception: " + e);
    }
    System.out.println (":::::::::::::::message == " + message);

    JMSProducer sendJms = new JMSProducer(message);
  }

With the arrayoutputstream stuff being done in  aseperate class:

public ByteStreamSetup() {

    // initialise the output stream
    byteOut = new ByteArrayOutputStream();
    // wrap the OP stream in the writer
    myOutput = new BufferedWriter( new OutputStreamWriter(byteOut) );

    // get the buffer contents and read it into our stream reader, wrapped in a
    // buffered reader which converts a stream of bytes to charatcers in one.
    byteIn = new ByteArrayInputStream(byteOut.toByteArray());

    //myInput = new BufferedReader ( new InputStreamReader(byteIn) );
  }

  public BufferedWriter getOutStream() {
    return myOutput;
  }

  public ByteArrayInputStream getInStream() {
    //return myInput;
    return byteIn;
  }

Is this a WriterAppender problem???
I can't work out where my message is getting lost??

Any ideas??

cheers
matt


**************************************************************************
Privileged, confidential and/or copyright information may be contained in
this e-mail. This e-mail is for the use only of the intended addressee. If
you are not the intended addressee, or the person responsible for
delivering it to the intended addressee, you may not copy, forward,
disclose or otherwise use it or any part of it in any way whatsoever. To do
so is prohibited and may be unlawful.
If you receive this e-mail by mistake please advise the sender immediately
by using the reply facility in your e-mail software.

Bull Information Systems Limited may monitor the content of e-mails sent
and received via its network for the purposes of ensuring compliance with
its policies and procedures.

This message is subject to and does not create or vary any contractual
relationship between Bull Information Systems Limited and you.

Bull Information Systems Limited. Registered Office: Computer House, Great
West Road, Brentford, Middlesex TW8 9DH. Registered in England.
Registration Number: 2017873

Thank you.
**************************************************************************


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: WriterAppender problem

Posted by Kevin Steppe <ks...@pacbell.net>.
Matthew, 

    The problem in in your ByteStreamSetup class.  You wrap
byteIn around byteOut during construction of the object. 
This causes
byteIn to wrap the btye array held by byteOut at
*construction* time -- when the array is null of course.  I
moved the byteIn
construction (byteIn = new
ByteArrayInputStream(byteOut.toByteArray());)  to
getInStream() and it works fine.  You might consider
using PipedWriter/Reader pair rather than all that byte
array confusion if you really are passing strings around. 

Kevin 

ps. if you are hiring, I'm looking for work 
  


Matthew.Taylor@integris.co.uk wrote:
> 
> Can anyone find the problem here?
> 
> I have a writer appender that writes to a bytearrayoutputstream.
> I have a bytearrayinputstream wrapped in a bufferedreader that reads the
> logged message from the stream once it has been logged.
> However, my stream is empty, or at least the string conversion returns
> null.
> 
> My code is :
> 
> BufferedWriter outputStream = setup.getOutStream();
> 
> cat = (AuditCategory) AuditCategory.getInstance(classFQN);
> 
> PatternLayout logLayout = new PatternLayout();
> 
> ConsoleAppender consoleApp = new ConsoleAppender(logLayout);
> WriterAppender writerApp = new WriterAppender(logLayout, outputStream);
> 
> consoleApp.setThreshold(AuditLogPriority.DEBUG)
> writerApp.setThreshold(AuditLogPriority.AUDIT);
> 
> cat.addAppender(consoleApp);
> cat.addAppender(writerApp);
> 
> To setup the category with the correct appenders.
> 
> Then:
> 
> public void audit(java.lang.Object message) {
>     System.out.println("message in audit method = " + message.toString());
>     cat.audit(message);
>     sendJmsMessage();
>   }
> 
>   private void sendJmsMessage() {
> 
>     ByteArrayInputStream byteIn = setup.getInStream();
> 
>     BufferedReader myInput = new BufferedReader ( new InputStreamReader(byteIn) );
> 
>     try {System.out.println(myInput.readLine());}  // !!!!!!!!This returns null here!!!!!!!!!
>     catch (Exception e){}
> 
>     String message = new String();
> 
>     try {
>       // read the now characters and convert to string
>       message = myInput.readLine();
>     }
>     catch (IOException e) {
>       System.out.println ("Exception: " + e);
>     }
>     System.out.println (":::::::::::::::message == " + message);
> 
>     JMSProducer sendJms = new JMSProducer(message);
>   }
> 
> With the arrayoutputstream stuff being done in  aseperate class:
> 
> public ByteStreamSetup() {
> 
>     // initialise the output stream
>     byteOut = new ByteArrayOutputStream();
>     // wrap the OP stream in the writer
>     myOutput = new BufferedWriter( new OutputStreamWriter(byteOut) );
> 
>     // get the buffer contents and read it into our stream reader, wrapped in a
>     // buffered reader which converts a stream of bytes to charatcers in one.
>     byteIn = new ByteArrayInputStream(byteOut.toByteArray());
> 
>     //myInput = new BufferedReader ( new InputStreamReader(byteIn) );
>   }
> 
>   public BufferedWriter getOutStream() {
>     return myOutput;
>   }
> 
>   public ByteArrayInputStream getInStream() {
>     //return myInput;
>     return byteIn;
>   }
> 
> Is this a WriterAppender problem???
> I can't work out where my message is getting lost??
> 
> Any ideas??
> 
> cheers
> matt
> 
> **************************************************************************
> Privileged, confidential and/or copyright information may be contained in
> this e-mail. This e-mail is for the use only of the intended addressee. If
> you are not the intended addressee, or the person responsible for
> delivering it to the intended addressee, you may not copy, forward,
> disclose or otherwise use it or any part of it in any way whatsoever. To do
> so is prohibited and may be unlawful.
> If you receive this e-mail by mistake please advise the sender immediately
> by using the reply facility in your e-mail software.
> 
> Bull Information Systems Limited may monitor the content of e-mails sent
> and received via its network for the purposes of ensuring compliance with
> its policies and procedures.
> 
> This message is subject to and does not create or vary any contractual
> relationship between Bull Information Systems Limited and you.
> 
> Bull Information Systems Limited. Registered Office: Computer House, Great
> West Road, Brentford, Middlesex TW8 9DH. Registered in England.
> Registration Number: 2017873
> 
> Thank you.
> **************************************************************************
> 
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>