I'm trying to replace all '\t' and '\r\n' characters from the Message field of 
a log entry.  I have attempted to solve a couple different ways, but both 
solutions created, what appears to be, a huge memory leak that was unacceptable.

My first attempt was on the client shipper side. Here's my CONF block.

<Input eventlog_2008_default>
       Module im_msvistalog
       SavePos       True
       Query         <QueryList>\
                            <Query Id="0">\
                                  <Select Path="Application">*</Select> \
                                  <Select Path="System">*</Select>\
                                  <Select Path="Security">*</Select>\
                           </Query>\
                     </QueryList>
Exec   if $Message =~ s/(\t|\r\n)/ /g log_debug("Replaced spaces & newlines in 
eventlog_2008_default");
</Input>

Every message that was received from this shipper looked correct, but the 
memory usage skyrocketed on the client side.

I tried a slightly different method after reading the architecture 
documentation. Because each processor block is spun off into its own thread I 
thought it could process the regex more efficiently. I created patterndb.xml 
file that performed the above regex on the Message field on the receiver side.  
The receiver is a server with a lot more horsepower than the client. Here's the 
code:

<?xml version="1.0"?>
<patterndb>
       <created>2013-12-03 14:14:00</created>
       <version>1</version>

       <group>
              <name>windows_eventlog</name>
              <id>1</id>
              <matchfield>
                     <name>SourceModuleType</name>
                     <type>exact</type>
                     <value>im_msvistalog</value>
              </matchfield>
              <pattern>
                     <id>101</id>
                     <name>remove_tab_newline</name>
                     <matchfield>
                           <name>Message</name>
                           <type>regexp</type>
                           <value>\t|\r\n</value>
                     </matchfield>
                     <exec>if $Message =~ s/\t|\r\n/ /g log_debug("Removed tabs 
and carriage return");</exec>
              </pattern>
       </group>
</patterndb>

This also worked as expected, but it also had, what appears to be, a huge 
memory leak.

I know regex is hugely inefficient for these types of search and replaces at 
higher speeds. Is there a better way? Is there something in my config that I 
can do to optimize?

------------------------------------------------------------------------------
Sponsored by Intel(R) XDK 
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________
nxlog-ce-users mailing list
nxlog-ce-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nxlog-ce-users

Reply via email to