[ 
https://issues.apache.org/jira/browse/LOG4J2-808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14119972#comment-14119972
 ] 

Pranav Pratap edited comment on LOG4J2-808 at 9/3/14 3:33 PM:
--------------------------------------------------------------

The reason I kept 2 appender's is I need to verify as what is on the console is 
same in file which is being logged. In real time, I would be using rolling file 
appender. This is a kind of quick validation so that you need not look into the 
log file to check the results everytime.

Now coming on the question. If you run my piece of code, with regex as ".\*",  
as you had suggest in above post, you will find all the logs which are present 
in the sample application. In the logs/console you will see logs with key 
words, NPF, NTL, NPE etc.

Case 1: Now run the regex as follows: <RegexFilter regex=".\*NPE.\*" 
onMatch="ACCEPT" and onMismatch="DENY"/> and check the result.

Then run the same regex with Case 2:
<RegexFilter regex=".\*NPE.\*" onMatch="ACCEPT" and onMismatch="NEUTRAL"/> and 
compare the results. In 2nd case, I was expecting to get the results as per 
onMatch and only to print the logs as per the pattern but it printed all the 
logs. This is not fine. 

Case 3: 
<RegexFilter regex=".\*XYZ.\*" onMatch="ACCEPT" and onMismatch="NEUTRAL"/> This 
pattern is not present in my code. Hence onMismatch, it should print all logs. 
This is as fine.

Check on Case 2. In case of Neutral, since the state is indeterminate, and if 
no other filters is mentioned, it will log everything. Then onMismatch it works 
fine in case 3. But in Case 2, the pattern is present in my logs then it should 
go with onMatch="ACCEPT" and it should present exact logs as we have in case 1, 
but instead it overrides Accept for neurtal and prints all.


was (Author: ppratap404):
The reason I kept 2 appender's is I need to verify as what is on the console is 
same in file which is being logged. In real time, I would be using rolling file 
appender. This is a kind of quick validation so that you need look into the log 
file to check the results.

Now coming on the question. If you run my piece of code, with regex as ".\*",  
as you had suggest in above post, you will find all the logs which are present 
in the sample application. In the logs/console you will see logs with key 
words, NPF, NTL, NPE etc.

Case 1: Now run the regex as follows: <RegexFilter regex=".\*NPE.\*" 
onMatch="ACCEPT" and onMismatch="DENY"/> and check the result.

Then run the same regex with Case 2:
<RegexFilter regex=".\*NPE.\*" onMatch="ACCEPT" and onMismatch="NEUTRAL"/> and 
compare the results. In 2nd case, I was expecting to get the results as per 
onMatch and only to print the logs as per the pattern but it printed all the 
logs. This is not fine. 

Case 3: 
<RegexFilter regex=".\*XYZ.\*" onMatch="ACCEPT" and onMismatch="NEUTRAL"/> This 
pattern is not present in my code. Hence onMismatch, it should print all logs. 
This is as fine.

Check on Case 2. In case of Neutral, since the state is indeterminate, and if 
no other filters is mentioned, it will log everything. Then onMismatch it works 
fine in case 3. But in Case 2, the pattern is present in my logs then it should 
go with onMatch="ACCEPT" and it should present exact logs as we have in case 1, 
but instead it overrides Accept for neurtal and prints all.

> RegexFilter does not work properly with RollingFileAppenders 
> -------------------------------------------------------------
>
>                 Key: LOG4J2-808
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-808
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Filters
>    Affects Versions: 2.0-rc1
>            Reporter: Pranav Pratap
>              Labels: newbie
>             Fix For: 2.0-rc1
>
>         Attachments: HelloWorld.java, MainApp.java, log4j2.xml
>
>
> I am trying to use Regexfilter in RollingFileAppender. For 1st matching 
> instance it retreived the logger, but after that I different patttern but 
> nothing is logged in the file. Here is what I am using:
> {code}
> Main Class:
> public class MainApp {
>     /** 
>      * @param args
>      */
>      public static void main(String[] args) {
>          // TODO Auto-generated method stub
>       final Logger logger = LogManager.getLogger(MainApp.class.getName());
>       
>       ApplicationContext context = new 
> ClassPathXmlApplicationContext("Beans.xml");
>               
>         HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
>         logger.trace("NPF:Trace:Entering Log4j2 Example.");
>         logger.debug("NTL:debug Entering Log4j2 Example.");
>         obj.getMessage();     
>         Company comp = new Company();
>         comp.setCompName("ANC");
>         comp.setEstablish(1889);
>      
>         CompanyBusiness compBus =      
> (CompanyBusiness)context.getBean("compBus");
>         compBus.finaceBusiness(comp.getCompName(), comp.getEstablish());
>         logger.trace("NTL: Trace: Exiting Log4j2 Example.");
>     }
> }
> {code}
> log4j2.xml:
> {code}
> <?xml version="1.0" encoding="UTF-8" ?>
> <Configuration>
>       <Appenders>
>              <Console name="STDOUT" target="SYSTEM_OUT">
>                  <PatternLayout pattern="%d{yyyy-MM-dd [%t] HH:mm:ss} %-5p 
> %c{1}:%L - %m%X%n" />
>           </Console>
>           <RollingFile name="RollingFile" 
> fileName="C:\logTest\runtime\tla\els3.log"  append="true"
>                               
> filePattern="C:\logTest\runtime\tla\els3-%d{yyyy-MM-dd}-%i.log" >
>                 <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level 
> %logger{36} - %m%X%n" />
>                 <RegexFilter regex=".*business*." onMatch="ACCEPT" 
> onMismatch="DENY"/>        
>                 <Policies>
>                     <SizeBasedTriggeringPolicy size="20 MB" />
>                 </Policies>           
>             </RollingFile>            
>       </Appenders>
>       <Loggers>
>               <Logger name="com.anc" level="trace"/>  
>               <Root level="trace"> 
>                   <AppenderRef ref="STDOUT" /> 
>                   <AppenderRef ref="RollingFile"/> 
>               </Root> 
>       </Loggers>
> </Configuration>
> {code}
> When I ran for the first time, in my logfile I got logs having only 
> "business" related line. Latter I changed the patter from .*business*. to 
> "business", logging did not happen in file nor on the console. Also my 
> application terminated without any kind of logging.
> Then I tried to revert back the pattern to .*business*., thereafter no 
> logging happened on the log file, but on the console all the log trace is 
> printed. When I comment out the Regexfilter after trying for long time, my 
> logs was printed in the log file.
> I am not sure if this is a bug of Regexfilter works only for one time. Also 
> if we do not pass any patter matching characters, the application stops 
> without any log printing either on console or file.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to