From c6b8ae46ecf93be3786161f0bcb37dd2aae20e3f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicolas=20Lalev=C3=A9e?= <nicolas.lalevee@hibnet.org>
Date: Wed, 20 Apr 2016 14:05:09 +0200
Subject: [PATCH 1/2] only build the log message is necessary

---
 .../joestelmach/natty/generated/DateLexer.g    |  8 +++++---
 .../joestelmach/natty/generated/DateParser.g   |  8 +++++---
 .../com/joestelmach/natty/IcsSearcher.java     |  6 +++---
 .../java/com/joestelmach/natty/Parser.java     | 18 ++++++++++--------
 4 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/src/main/antlr3/com/joestelmach/natty/generated/DateLexer.g b/src/main/antlr3/com/joestelmach/natty/generated/DateLexer.g
index 5f85fa30..ae3c389f 100644
--- a/src/main/antlr3/com/joestelmach/natty/generated/DateLexer.g
+++ b/src/main/antlr3/com/joestelmach/natty/generated/DateLexer.g
@@ -8,9 +8,11 @@ lexer grammar DateLexer;
 
   @Override
   public void displayRecognitionError(String[] tokenNames, RecognitionException re) {
-    String message = getErrorHeader(re);
-    try { message += getErrorMessage(re, tokenNames); } catch(Exception e) {}
-    _logger.debug(message);
+    if (_logger.isDebugEnabled()) {
+      String message = getErrorHeader(re);
+      try { message += getErrorMessage(re, tokenNames); } catch(Exception e) {}
+      _logger.debug(message);
+    }
   }
 }
 
diff --git a/src/main/antlr3/com/joestelmach/natty/generated/DateParser.g b/src/main/antlr3/com/joestelmach/natty/generated/DateParser.g
index d3c99128..30b35810 100644
--- a/src/main/antlr3/com/joestelmach/natty/generated/DateParser.g
+++ b/src/main/antlr3/com/joestelmach/natty/generated/DateParser.g
@@ -46,9 +46,11 @@ tokens {
 
   @Override
   public void displayRecognitionError(String[] tokenNames, RecognitionException re) {
-    String message = getErrorHeader(re);
-    try { message += getErrorMessage(re, tokenNames); } catch(Exception e) {}
-    _logger.debug(message);
+    if (_logger.isDebugEnabled()) {
+      String message = getErrorHeader(re);
+      try { message += getErrorMessage(re, tokenNames); } catch(Exception e) {}
+      _logger.debug(message);
+    }
   }
 }
 
diff --git a/src/main/java/com/joestelmach/natty/IcsSearcher.java b/src/main/java/com/joestelmach/natty/IcsSearcher.java
index ddf058d3..5ec7985d 100644
--- a/src/main/java/com/joestelmach/natty/IcsSearcher.java
+++ b/src/main/java/com/joestelmach/natty/IcsSearcher.java
@@ -43,11 +43,11 @@ public Map<Integer, Date> findDates(int startYear, int endYear, String eventSumm
         _holidayCalendar = new CalendarBuilder().build(fin);
         
       } catch (IOException e) {
-        _logger.error("Couln't open " + _calendarFileName);
+        _logger.error("Couln't open {}", _calendarFileName);
         return holidays;
         
       } catch (ParserException e) {
-        _logger.error("Couln't parse " + _calendarFileName);
+        _logger.error("Couln't parse {}", _calendarFileName);
         return holidays;
       }
     }
@@ -59,7 +59,7 @@ public Map<Integer, Date> findDates(int startYear, int endYear, String eventSumm
       period = new Period(from, to);
       
     } catch (ParseException e) {
-      _logger.error("Invalid start or end year: " + startYear + ", " + endYear, e);
+      _logger.error("Invalid start or end year: {}, {}", startYear, endYear, e);
       return holidays;
     }
     
diff --git a/src/main/java/com/joestelmach/natty/Parser.java b/src/main/java/com/joestelmach/natty/Parser.java
index 9a0f666f..8bb41bca 100644
--- a/src/main/java/com/joestelmach/natty/Parser.java
+++ b/src/main/java/com/joestelmach/natty/Parser.java
@@ -204,7 +204,7 @@ private DateGroup singleParse(TokenStream stream, String fullText, Date referenc
 
       // we only continue if a meaningful syntax tree has been built
       if(tree.getChildCount() > 0) {
-        _logger.info("PARSE: " + tokenString.toString());
+        _logger.info("PARSE: {}", tokenString.toString());
 
         // rewrite the tree (temporary fix for http://www.antlr.org/jira/browse/ANTLR-427)
         CommonTreeNodeStream nodes = new CommonTreeNodeStream(tree);
@@ -218,7 +218,7 @@ private DateGroup singleParse(TokenStream stream, String fullText, Date referenc
         walker.setReferenceDate(referenceDate);
         walker.getState().setDefaultTimeZone(_defaultTimeZone);
         walker.parse();
-        _logger.info("AST: " + tree.toStringTree());
+        _logger.info("AST: {}", tree.toStringTree());
 
         // run through the results and append the parse information
         group = walker.getState().getDateGroup();
@@ -307,16 +307,18 @@ private List<TokenStream> collectTokenStreams(TokenStream stream) {
       addGroup(currentGroup, groups);
     }
     
-    _logger.info("STREAM: " + tokenString.toString());
+    _logger.info("STREAM: {}", tokenString.toString());
     List<TokenStream> streams = new ArrayList<TokenStream>();
     for(List<Token> group:groups) {
       if(!group.isEmpty()) {
-        StringBuilder builder = new StringBuilder();
-        builder.append("GROUP: ");
-        for (Token token : group) {
-          builder.append(DateParser.tokenNames[token.getType()]).append(" ");
+        if (_logger.isInfoEnabled()) {
+          StringBuilder builder = new StringBuilder();
+          builder.append("GROUP: ");
+          for (Token token : group) {
+            builder.append(DateParser.tokenNames[token.getType()]).append(" ");
+          }
+          _logger.info(builder.toString());
         }
-        _logger.info(builder.toString());
 
         streams.add(new CommonTokenStream(new NattyTokenSource(group)));
       }

From 1a1f19619035472095daa3fc1ab3cfcd4a0b61a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicolas=20Lalev=C3=A9e?= <nicolas.lalevee@hibnet.org>
Date: Wed, 20 Apr 2016 15:04:10 +0200
Subject: [PATCH 2/2] redirect error messages to a proper logger

---
 .../joestelmach/natty/generated/DateLexer.g    |  5 +++++
 .../joestelmach/natty/generated/DateParser.g   | 12 ++++++++++++
 .../joestelmach/natty/generated/DateWalker.g   |  8 ++++++++
 .../joestelmach/natty/generated/TreeRewrite.g  |  8 ++++++++
 .../natty/generated/imports/NumericRules.g     | 18 +++++++++++++++++-
 5 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/src/main/antlr3/com/joestelmach/natty/generated/DateLexer.g b/src/main/antlr3/com/joestelmach/natty/generated/DateLexer.g
index ae3c389f..3939733d 100644
--- a/src/main/antlr3/com/joestelmach/natty/generated/DateLexer.g
+++ b/src/main/antlr3/com/joestelmach/natty/generated/DateLexer.g
@@ -14,6 +14,11 @@ lexer grammar DateLexer;
       _logger.debug(message);
     }
   }
+
+  @Override
+  public void emitErrorMessage(String msg) {
+    _logger.error(msg);
+  }
 }
 
 // ********** date rules ********** 
diff --git a/src/main/antlr3/com/joestelmach/natty/generated/DateParser.g b/src/main/antlr3/com/joestelmach/natty/generated/DateParser.g
index 30b35810..54d1b5d3 100644
--- a/src/main/antlr3/com/joestelmach/natty/generated/DateParser.g
+++ b/src/main/antlr3/com/joestelmach/natty/generated/DateParser.g
@@ -38,6 +38,8 @@ tokens {
 
 @header {
   package com.joestelmach.natty.generated;
+  
+  import java.io.IOException;
 }
 
 @members {
@@ -52,6 +54,16 @@ tokens {
       _logger.debug(message);
     }
   }
+
+  @Override
+  public void reportError(IOException e) {
+    _logger.error("Unexpected IO error", e);
+  }
+
+  @Override
+  public void emitErrorMessage(String msg) {
+    _logger.error(msg);
+  }
 }
 
 parse
diff --git a/src/main/antlr3/com/joestelmach/natty/generated/DateWalker.g b/src/main/antlr3/com/joestelmach/natty/generated/DateWalker.g
index 8d87db3b..6f8eacdf 100644
--- a/src/main/antlr3/com/joestelmach/natty/generated/DateWalker.g
+++ b/src/main/antlr3/com/joestelmach/natty/generated/DateWalker.g
@@ -8,6 +8,9 @@ options {
 @header { package com.joestelmach.natty.generated; }
 
 @members {
+  private static org.slf4j.Logger _logger =
+    org.slf4j.LoggerFactory.getLogger(com.joestelmach.natty.generated.DateWalker.class);
+
   private com.joestelmach.natty.WalkerState _walkerState;
   private java.util.Date referenceDate;
 
@@ -23,6 +26,11 @@ options {
     throw e;
   }
 
+  @Override
+  public void emitErrorMessage(String msg) {
+    _logger.error(msg);
+  }
+
   public void setReferenceDate(java.util.Date referenceDate) {
     this.referenceDate = referenceDate;
   }
diff --git a/src/main/antlr3/com/joestelmach/natty/generated/TreeRewrite.g b/src/main/antlr3/com/joestelmach/natty/generated/TreeRewrite.g
index 4ca30869..4a9d89a5 100644
--- a/src/main/antlr3/com/joestelmach/natty/generated/TreeRewrite.g
+++ b/src/main/antlr3/com/joestelmach/natty/generated/TreeRewrite.g
@@ -10,6 +10,9 @@ options {
 @header { package com.joestelmach.natty.generated; }
 
 @members {
+  private static org.slf4j.Logger _logger =
+    org.slf4j.LoggerFactory.getLogger(com.joestelmach.natty.generated.TreeRewrite.class);
+
   @Override
   protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow)
       throws RecognitionException {
@@ -21,6 +24,11 @@ options {
       throws RecognitionException {
     throw e;
   }
+
+  @Override
+  public void emitErrorMessage(String msg) {
+    _logger.error(msg);
+  }
 }
 
 @rulecatch {
diff --git a/src/main/antlr3/com/joestelmach/natty/generated/imports/NumericRules.g b/src/main/antlr3/com/joestelmach/natty/generated/imports/NumericRules.g
index b23d78c7..3e0cf882 100644
--- a/src/main/antlr3/com/joestelmach/natty/generated/imports/NumericRules.g
+++ b/src/main/antlr3/com/joestelmach/natty/generated/imports/NumericRules.g
@@ -7,7 +7,23 @@ options {
 tokens {
   INT;
 }
-  
+
+@members {
+  private static org.slf4j.Logger _logger =
+    org.slf4j.LoggerFactory.getLogger(com.joestelmach.natty.generated.DateParser_NumericRules.class);
+
+  @Override
+  public void reportError(IOException e) {
+    _logger.error("Unexpected IO error", e);
+  }
+
+  @Override
+  public void emitErrorMessage(String msg) {
+    _logger.error(msg);
+  }
+}
+
+
 // ********** numeric rules **********
 
 // a number between 00 and 59 inclusive, with a mandatory 0 prefix before numbers 0-9