If you are buffering events in memory you run the risk of losing events if 
something should fail. 

That said, if I had your requirements I would use the FlumeAppender. It has 
either an in-memory option to buffer as you are suggesting or it can write to a 
local file to prevent data loss if that is a requirement. It already has the 
configuration options you are looking for and has been well tested. The only 
downside is that you need to have either a Flume instance receiving the 
messages are something that can receive Flume events over Avro, but it is 
easier just to use Flume and write a custom sink to do what you want with the 
data.

Ralph

> On Sep 24, 2016, at 3:13 PM, Gary Gregory <garydgreg...@gmail.com> wrote:
> 
> Hi All,
> 
> I can't believe it, but through a convoluted use-case, I actually need an 
> in-memory list appender, very much like our test-only ListAppender.
> 
> The requirement is as follows.
> 
> We have a JDBC driver and matching proprietary database that specializes in 
> data virtualization of mainframe resources like DB2, VSAM, IMS, and all sorts 
> of non-SQL data sources 
> (http://www.rocketsoftware.com/products/rocket-data/rocket-data-virtualization
>  
> <http://www.rocketsoftware.com/products/rocket-data/rocket-data-virtualization>)
>  
> 
> The high level requirement is to merge the driver log into the server's log 
> for full-end to end tractability and debugging.
> 
> When the driver is running on the z/OS mainframe, it can be configured with a 
> z/OS specific Appender that can talk to the server log module directly.
> 
> When the driver is running elsewhere, it can talk to the database via a 
> Syslog socket Appender. This requires more set up on the server side and for 
> the server to do special magic to know how the incoming log events match up 
> with server operations. Tricky.
> 
> The customer should also be able to configure the driver such that anytime 
> the driver communicates to the database, it sends along whatever log events 
> have accumulated since the last client-server roundtrip. This allows the 
> server to match exactly the connection and operations the client performed 
> with the server's own logging.
> 
> In order to do that I need to buffer all log events in an Appender and when 
> it's time, I need to get the list of events and reset the appender to a new 
> empty list so events can keep accumulating.
> 
> My proposal is to either turn our ListAppender into such an appender. For 
> sanity, the appender could be configured with various sizing policies:
> 
> - open: the list grows unbounded
> - closed: the list grows to a given size and _new_ events are dropped on the 
> floor beyond that
> - latest: the list grows to a given size and _old_ events are dropped on the 
> floor beyond that
> 
> Thoughts?
> 
> Gary
> 
> -- 
> E-Mail: garydgreg...@gmail.com <mailto:garydgreg...@gmail.com> | 
> ggreg...@apache.org  <mailto:ggreg...@apache.org>
> Java Persistence with Hibernate, Second Edition 
> <http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com <http://garygregory.wordpress.com/> 
> Home: http://garygregory.com/ <http://garygregory.com/>
> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>

Reply via email to