Commit 7706bfa491d85ea04c84e0006040a8c03b83a377

Authored by Nathanael Jourdane
1 parent 4494f1ae
Exists in master

Use log4j as logging utility.

log4j.properties 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +log4j.rootLogger=INFO, stdout
  2 +log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3 +log4j.appender.stdout.Target=System.out
  4 +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  5 +log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/EpnTapMainApp.java
... ... @@ -19,8 +19,9 @@ package eu.omp.irap.vespa.epntapclient;
19 19 import javax.swing.JFrame;
20 20 import javax.swing.SwingUtilities;
21 21  
  22 +import org.apache.log4j.Logger;
  23 +
22 24 import eu.omp.irap.vespa.epntapclient.controller.EpnTapController;
23   -import eu.omp.irap.vespa.epntapclient.utils.Log;
24 25  
25 26 /**
26 27 * Simple class to have a main function to launch the EPNTap client.
... ... @@ -29,6 +30,9 @@ import eu.omp.irap.vespa.epntapclient.utils.Log;
29 30 */
30 31 public class EpnTapMainApp {
31 32  
  33 + /** The logger for this class. */
  34 + private static final Logger logger = Logger.getLogger(EpnTapMainApp.class);
  35 +
32 36 /** Constructor to hide the implicit public one. */
33 37 private EpnTapMainApp() {
34 38 }
... ... @@ -40,7 +44,7 @@ public class EpnTapMainApp {
40 44 */
41 45 public static void main(String[] args) {
42 46 EpnTapController epnTapControl = new EpnTapController();
43   - Log.LOGGER.info("Lauching EPN-TAP application...");
  47 + logger.info("Lauching EPN-TAP application...");
44 48 if (args.length != 0) {
45 49 System.console().writer().println("Usage: EpnTapMainApp");
46 50 return;
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/controller/EpnTapController.java
... ... @@ -16,8 +16,9 @@
16 16  
17 17 package eu.omp.irap.vespa.epntapclient.controller;
18 18  
  19 +import org.apache.log4j.Logger;
  20 +
19 21 import eu.omp.irap.vespa.epntapclient.utils.Const;
20   -import eu.omp.irap.vespa.epntapclient.utils.Log;
21 22 import eu.omp.irap.vespa.epntapclient.utils.Queries;
22 23 import eu.omp.irap.vespa.epntapclient.view.EpnTapMainView;
23 24 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableController;
... ... @@ -28,6 +29,9 @@ import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView;
28 29 * @author N. Jourdane
29 30 */
30 31 public class EpnTapController {
  32 + /** The logger for this class. */
  33 + private static final Logger logger = Logger.getLogger(EpnTapController.class);
  34 +
31 35 /** The view of EPN-TAP application. */
32 36 EpnTapMainView view;
33 37  
... ... @@ -85,7 +89,7 @@ public class EpnTapController {
85 89 String serviceURL = (String) view.getServices().getValueAt(1, row);
86 90 if (!serviceURL.equals(selectedServiceURL)) {
87 91 selectedServiceURL = serviceURL;
88   - Log.LOGGER.info("Selected service URL: " + selectedServiceURL);
  92 + logger.info("Selected service URL: " + selectedServiceURL);
89 93 }
90 94 }
91 95  
... ... @@ -94,7 +98,7 @@ public class EpnTapController {
94 98 * @throws VOTableException Can not fill the Table
95 99 */
96 100 public void sendQuery(String query) throws VOTableException {
97   - Log.LOGGER.info("Sending query: " + query + " on " + selectedServiceURL);
  101 + logger.info("Sending query: " + query + " on " + selectedServiceURL);
98 102 resultsController.fillTable(selectedServiceURL, "ADQL", query);
99 103 }
100 104 }
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/utils/Log.java
... ... @@ -23,22 +23,25 @@ import java.io.PrintWriter;
23 23 import java.nio.file.Files;
24 24 import java.nio.file.Paths;
25 25 import java.nio.file.StandardOpenOption;
26   -import java.util.logging.Logger;
  26 +
  27 +import org.apache.log4j.Logger;
27 28  
28 29 import com.google.gson.Gson;
29 30 import com.google.gson.GsonBuilder;
30 31  
  32 +import eu.omp.irap.vespa.epntapclient.EpnTapMainApp;
  33 +
31 34 /**
32   - * Simple class to provide the logger.
  35 + * Simple class to provide logging features
33 36 *
34 37 * @author N. Jourdane
35 38 */
36 39 public class Log {
37   - /** The logger. */
38   - public static final Logger LOGGER = Logger.getAnonymousLogger();
  40 + /** The logger for this class. */
  41 + private static final Logger logger = Logger.getLogger(EpnTapMainApp.class);
39 42  
40   - /** The log message displayed when errors appends. */
41   - public static final String ERROR_MSG = "-- error --\n%1s\nbecause:\n%2s\n-- end of error --\n";
  43 + /** The log file path used by `logInFile` and `clearLogFile`. */
  44 + private static String logPath = Const.TMP_DIR + "/log";
42 45  
43 46 /** Constructor to hide the implicit public one. */
44 47 private Log() {
... ... @@ -70,36 +73,39 @@ public class Log {
70 73 writer.write(json);
71 74  
72 75 } catch (IOException e) {
73   - Log.LOGGER.severe("Can not print in the file: \n" + e);
  76 + logger.error("Can not print in the file " + path, e);
74 77 }
75 78  
76 79 return path;
77 80 }
78 81  
79   - // TODO: Use Log4j instead
  82 + // TODO: Use log4j FileAppender instead
80 83  
81 84 /**
82 85 * Delete the content of the log file.
83 86 */
84   - public static void clearFile() {
85   - try (PrintWriter writer = new PrintWriter(Const.TMP_DIR + "/log")) {
  87 + public static void clearLogFile() {
  88 + try (PrintWriter writer = new PrintWriter(logPath)) {
86 89 writer.print("");
87 90 } catch (FileNotFoundException e) {
88   - Log.LOGGER.severe("File not found, can not clear it: \n" + e);
  91 + logger.error("File " + logPath + " not found, can not clear it.", e);
89 92 }
90 93 }
91 94  
  95 + // TODO: Use log4j FileAppender instead
  96 +
92 97 /**
93 98 * Print a message in a log file (named "log").
94 99 *
95 100 * @param text The text to log in the file
96 101 */
97 102 public static void logInFile(Object text) {
  103 +
98 104 try {
99   - Files.write(Paths.get(Const.TMP_DIR + "/log"), (text.toString() + "\n").getBytes(),
  105 + Files.write(Paths.get(logPath), (text.toString() + "\n").getBytes(),
100 106 StandardOpenOption.APPEND);
101 107 } catch (IOException e) {
102   - Log.LOGGER.severe("Can not print in the file: \n" + e);
  108 + logger.error("Can not print in the file " + logPath, e);
103 109 }
104 110 }
105 111  
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/view/RequestView.java
... ... @@ -25,7 +25,8 @@ import javax.swing.JLabel;
25 25 import javax.swing.JPanel;
26 26 import javax.swing.JTextArea;
27 27  
28   -import eu.omp.irap.vespa.epntapclient.utils.Log;
  28 +import org.apache.log4j.Logger;
  29 +
29 30 import eu.omp.irap.vespa.epntapclient.utils.Queries;
30 31 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException;
31 32  
... ... @@ -34,6 +35,9 @@ import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException;
34 35 */
35 36 public class RequestView extends JPanel implements ActionListener {
36 37  
  38 + /** The logger for this class. */
  39 + private static final Logger logger = Logger.getLogger(RequestView.class);
  40 +
37 41 /** The serial version UID (affected with a random number). */
38 42 private static final long serialVersionUID = 1262856496809315405L;
39 43  
... ... @@ -69,7 +73,7 @@ public class RequestView extends JPanel implements ActionListener {
69 73 try {
70 74 mainView.getController().sendQuery(queryArea.getText());
71 75 } catch (VOTableException e) {
72   - Log.LOGGER.warning("Can not send query when clicking on the send button:\n" + e);
  76 + logger.error("Can not send query when clicking on the send button.", e);
73 77 }
74 78 }
75 79 }
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/votable/VOTableApp.java
... ... @@ -19,9 +19,10 @@ package eu.omp.irap.vespa.epntapclient.votable;
19 19 import javax.swing.JFrame;
20 20 import javax.swing.SwingUtilities;
21 21  
  22 +import org.apache.log4j.Logger;
  23 +
22 24 import com.google.gson.Gson;
23 25  
24   -import eu.omp.irap.vespa.epntapclient.utils.Log;
25 26 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableController;
26 27  
27 28 /**
... ... @@ -31,6 +32,9 @@ import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableController;
31 32 */
32 33 public class VOTableApp {
33 34  
  35 + /** The logger for this class. */
  36 + static final Logger logger = Logger.getLogger(VOTableApp.class);
  37 +
34 38 /** Constructor to hide the implicit public one. */
35 39 private VOTableApp() {
36 40 }
... ... @@ -55,7 +59,7 @@ public class VOTableApp {
55 59 public static void main(String[] args) {
56 60 // TODO: Add option to export to CSV and HTML in CLI.
57 61 VOTableController voTableControl;
58   - Log.LOGGER.info("Lauching VOTable app with arguments:\n " + new Gson().toJson(args));
  62 + logger.info("Lauching VOTable app with arguments:\n " + new Gson().toJson(args));
59 63 if (args.length == 1) {
60 64 voTableControl = new VOTableController(args[0]);
61 65 } else if (args.length == 3) {
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/votable/controller/VOTableConnection.java
... ... @@ -29,8 +29,9 @@ import java.net.URLEncoder;
29 29 import java.text.SimpleDateFormat;
30 30 import java.util.Date;
31 31  
  32 +import org.apache.log4j.Logger;
  33 +
32 34 import eu.omp.irap.vespa.epntapclient.utils.Const;
33   -import eu.omp.irap.vespa.epntapclient.utils.Log;
34 35 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.BadRequestException;
35 36 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.HTTPRequestException;
36 37  
... ... @@ -40,6 +41,10 @@ import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.HTTPRe
40 41 * @author N. Jourdane
41 42 */
42 43 public final class VOTableConnection {
  44 +
  45 + /** The logger for this class. */
  46 + private static final Logger logger = Logger.getLogger(VOTableConnection.class);
  47 +
43 48 /** The user agent used for the requests. */
44 49 private static final String USER_AGENT = "Mozilla/5.0";
45 50  
... ... @@ -71,7 +76,7 @@ public final class VOTableConnection {
71 76 throw new HTTPRequestException("Can not encode URI " + uri, e);
72 77 }
73 78  
74   - Log.LOGGER.info("request: " + uri + "?" + parameters);
  79 + logger.info("request: " + uri + "?" + parameters);
75 80 VOTableConnection.sendGet(uri, parameters, voTablePath);
76 81  
77 82 return voTablePath;
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/votable/controller/VOTableController.java
... ... @@ -18,7 +18,8 @@ package eu.omp.irap.vespa.epntapclient.votable.controller;
18 18  
19 19 import java.io.IOException;
20 20  
21   -import eu.omp.irap.vespa.epntapclient.utils.Log;
  21 +import org.apache.log4j.Logger;
  22 +
22 23 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.VOTableParsingException;
23 24 import eu.omp.irap.vespa.epntapclient.votable.model.Table;
24 25 import eu.omp.irap.vespa.epntapclient.votable.model.VOTABLE;
... ... @@ -29,6 +30,9 @@ import eu.omp.irap.vespa.epntapclient.votable.view.VOTableView;
29 30 */
30 31 public class VOTableController {
31 32  
  33 + /** The logger for this class. */
  34 + private static final Logger logger = Logger.getLogger(VOTableController.class);
  35 +
32 36 /** The view of the VOTable */
33 37 VOTableView view;
34 38  
... ... @@ -69,7 +73,7 @@ public class VOTableController {
69 73 try {
70 74 fillTable(VOTableConnection.sendQuery(targetURL, queryLanguage, query));
71 75 } catch (VOTableException e) {
72   - Log.LOGGER.info("VOTableController error: " + e);
  76 + logger.info("VOTableController error: " + e);
73 77 }
74 78 }
75 79  
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/votable/controller/VOTableDataParser.java
... ... @@ -23,6 +23,8 @@ import java.util.HashMap;
23 23 import java.util.List;
24 24 import java.util.Map;
25 25  
  26 +import org.apache.log4j.Logger;
  27 +
26 28 import com.google.gson.Gson;
27 29  
28 30 import eu.omp.irap.vespa.epntapclient.utils.Log;
... ... @@ -37,6 +39,9 @@ import eu.omp.irap.vespa.epntapclient.votable.model.TableData;
37 39 */
38 40 public class VOTableDataParser {
39 41  
  42 + /** The logger for this class. */
  43 + private static final Logger logger = Logger.getLogger(VOTableDataParser.class);
  44 +
40 45 /**
41 46 * A list of arrays, representing data stored in the VOTable. Each element is a VOTable row,
42 47 * where arrays elements are in the same order as `columnNames`.
... ... @@ -73,7 +78,7 @@ public class VOTableDataParser {
73 78 for (int i = 0; i < fields.size(); i++) {
74 79 columnsName[i] = fields.get(i).getName();
75 80 }
76   - Log.LOGGER.info("Columns name: " + new Gson().toJson(columnsName));
  81 + logger.info("Columns name: " + new Gson().toJson(columnsName));
77 82  
78 83 data = new ArrayList<>();
79 84  
... ... @@ -88,7 +93,7 @@ public class VOTableDataParser {
88 93 }
89 94  
90 95 String logPath = Log.printObject(data);
91   - Log.LOGGER.info("A json file representing the VOTable data has been created on " + logPath);
  96 + logger.info("A json file representing the VOTable data has been created on " + logPath);
92 97 }
93 98  
94 99 /**
... ... @@ -177,14 +182,12 @@ public class VOTableDataParser {
177 182 * @throws UnsupportedOperationException Data as arrays are not supported yet.
178 183 */
179 184 private void parseBinaryStream(Stream stream, List<Field> fields) {
180   - Log.LOGGER.info("Parsing data in BINARY stream...");
  185 + logger.info("Parsing data in BINARY stream...");
181 186 String strStream = stream.getValue().replaceAll("(\\r|\\n)", "");
182   - Log.clearFile();
183 187  
184 188 bytes = Base64.getDecoder().decode(strStream);
185 189 Object[] row = new Object[columnsName.length];
186 190  
187   - Log.clearFile();
188 191 int nValue = 0;
189 192 while (cursor < bytes.length) {
190 193 int nColumn = nValue % columnsName.length;
... ... @@ -258,7 +261,7 @@ public class VOTableDataParser {
258 261 * @param fields The Fields corresponding to the Table.
259 262 */
260 263 private static void parseBinary2Stream(Stream stream, List<Field> fields) {
261   - Log.LOGGER.info("Parsing data in BINARY2 stream...");
  264 + logger.info("Parsing data in BINARY2 stream...");
262 265 // TODO Implement parseBinary2Stream()
263 266 }
264 267  
... ... @@ -267,7 +270,7 @@ public class VOTableDataParser {
267 270 * @param fields The Fields corresponding to the Table.
268 271 */
269 272 private static void parseTableDataStream(TableData tabledata, List<Field> fields) {
270   - Log.LOGGER.info("Parsing data in TABLEDATA stream...");
  273 + logger.info("Parsing data in TABLEDATA stream...");
271 274 // TODO Implement parseTableDataStream()
272 275 }
273 276  
... ... @@ -276,7 +279,7 @@ public class VOTableDataParser {
276 279 * @param fields The Fields corresponding to the Table.
277 280 */
278 281 private static void parseFITSStream(Stream stream, List<Field> fields) {
279   - Log.LOGGER.info("Parsing data in FITS stream...");
  282 + logger.info("Parsing data in FITS stream...");
280 283 // TODO Implement parseFITSStream()
281 284 }
282 285  
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/votable/controller/VOTableException.java
... ... @@ -16,9 +16,7 @@
16 16  
17 17 package eu.omp.irap.vespa.epntapclient.votable.controller;
18 18  
19   -import java.util.logging.Level;
20   -
21   -import eu.omp.irap.vespa.epntapclient.utils.Log;
  19 +import org.apache.log4j.Logger;
22 20  
23 21 /**
24 22 * VOTable Exception class.
... ... @@ -27,35 +25,42 @@ import eu.omp.irap.vespa.epntapclient.utils.Log;
27 25 */
28 26 @SuppressWarnings({ "javadoc", "serial" })
29 27 public class VOTableException extends Exception {
  28 +
  29 + /** The logger for this class. */
  30 + static final Logger logger = Logger.getLogger(VOTableException.class);
  31 +
  32 + /** The log message displayed when errors appends. */
  33 + private static final String ERROR_MSG = "-- error --\n%1s\nbecause:\n%2s\n-- end of error --\n";
  34 +
30 35 public VOTableException() {
31   - Log.LOGGER.log(Level.SEVERE, "A VOTable error occured.");
  36 + logger.error("A VOTable error occured.");
32 37 }
33 38  
34 39 public VOTableException(String message) {
35   - Log.LOGGER.log(Level.SEVERE, message);
  40 + logger.error(message);
36 41 }
37 42  
38 43 public VOTableException(String message, Exception e) {
39   - Log.LOGGER.log(Level.SEVERE, String.format(Log.ERROR_MSG, message, e.getMessage()));
  44 + logger.error(String.format(ERROR_MSG, message, e.getMessage()));
40 45 }
41 46  
42 47 public VOTableException(Exception e) {
43   - Log.LOGGER.log(Level.SEVERE, e.getMessage());
  48 + logger.error(e.getMessage());
44 49 }
45 50  
46 51 public static class HTTPRequestException extends VOTableException {
47 52 public HTTPRequestException(String message) {
48   - Log.LOGGER.log(Level.SEVERE, message);
  53 + logger.error(message);
49 54 }
50 55  
51 56 public HTTPRequestException(String message, Exception e) {
52   - Log.LOGGER.log(Level.SEVERE, String.format(Log.ERROR_MSG, message, e.getMessage()));
  57 + logger.error(String.format(ERROR_MSG, message, e.getMessage()));
53 58 }
54 59 }
55 60  
56 61 public static class VOTableParsingException extends VOTableException {
57 62 public VOTableParsingException(String message, Exception e) {
58   - Log.LOGGER.log(Level.SEVERE, String.format(Log.ERROR_MSG, message, e.getMessage()));
  63 + logger.error(String.format(ERROR_MSG, message, e.getMessage()));
59 64 }
60 65 }
61 66  
... ... @@ -65,7 +70,7 @@ public class VOTableException extends Exception {
65 70 public BadRequestException(String message, String info) {
66 71 super(message);
67 72 this.info = info;
68   - Log.LOGGER.log(Level.WARNING, message + "\nDetails: " + info);
  73 + logger.error(message + "\nDetails: " + info);
69 74 }
70 75  
71 76 public String getInfo() {
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/votable/controller/VOTableParser.java
... ... @@ -31,11 +31,11 @@ import javax.xml.transform.TransformerFactory;
31 31 import javax.xml.transform.dom.DOMSource;
32 32 import javax.xml.transform.stream.StreamResult;
33 33  
  34 +import org.apache.log4j.Logger;
34 35 import org.w3c.dom.Document;
35 36 import org.w3c.dom.NamedNodeMap;
36 37 import org.xml.sax.SAXException;
37 38  
38   -import eu.omp.irap.vespa.epntapclient.utils.Log;
39 39 import eu.omp.irap.vespa.epntapclient.votable.controller.VOTableException.VOTableParsingException;
40 40 import eu.omp.irap.vespa.epntapclient.votable.model.VOTABLE;
41 41  
... ... @@ -44,6 +44,9 @@ import eu.omp.irap.vespa.epntapclient.votable.model.VOTABLE;
44 44 */
45 45 public final class VOTableParser {
46 46  
  47 + /** The logger for this class. */
  48 + static final Logger logger = Logger.getLogger(VOTableParser.class);
  49 +
47 50 /** The path of the VOTable to verify the VOTable XML file. */
48 51 private static final String VOTABLE_SHEMA = "http://www.ivoa.net/xml/VOTable/v";
49 52  
... ... @@ -105,11 +108,11 @@ public final class VOTableParser {
105 108  
106 109 String version = votAttrs.getNamedItem("version").getTextContent();
107 110 if (version != JAXB_VOTABLE_VERSION) {
108   - Log.LOGGER.info("VOTable version is " + version + ", changing VOTable svhema to "
  111 + logger.info("VOTable version is " + version + ", changing VOTable svhema to "
109 112 + JAXB_VOTABLE_VERSION);
110 113 votAttrs.getNamedItem("xmlns").setTextContent(VOTABLE_SHEMA + JAXB_VOTABLE_VERSION);
111 114 } else {
112   - Log.LOGGER.info("VOTable version is " + version + ", everything is ok.");
  115 + logger.info("VOTable version is " + version + ", everything is ok.");
113 116 }
114 117  
115 118 // write the content into xml file
... ...
src/main/java/eu/omp/irap/vespa/epntapclient/votable/view/VOTableView.java
... ... @@ -18,7 +18,6 @@ package eu.omp.irap.vespa.epntapclient.votable.view;
18 18  
19 19 import java.awt.BorderLayout;
20 20 import java.util.List;
21   -import java.util.logging.Level;
22 21  
23 22 import javax.swing.JOptionPane;
24 23 import javax.swing.JPanel;
... ... @@ -29,7 +28,7 @@ import javax.swing.event.TableModelEvent;
29 28 import javax.swing.event.TableModelListener;
30 29 import javax.swing.table.DefaultTableModel;
31 30  
32   -import eu.omp.irap.vespa.epntapclient.utils.Log;
  31 +import org.apache.log4j.Logger;
33 32  
34 33 /**
35 34 * The main class of the View of the application.
... ... @@ -37,6 +36,10 @@ import eu.omp.irap.vespa.epntapclient.utils.Log;
37 36 * @author N. Jourdane
38 37 */
39 38 public class VOTableView extends JPanel implements TableModelListener {
  39 +
  40 + /** The logger for this class. */
  41 + static final Logger logger = Logger.getLogger(VOTableView.class);
  42 +
40 43 // TODO: Create classes VOTableGUI and VOTableCLI which implements an interface VOTableView
41 44 /** The serial version UID (affected with a random number). */
42 45 private static final long serialVersionUID = -6131752938586134234L;
... ... @@ -106,7 +109,7 @@ public class VOTableView extends JPanel implements TableModelListener {
106 109 */
107 110 public void displayError(String message) {
108 111 JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
109   - Log.LOGGER.log(Level.WARNING, message);
  112 + logger.warn(message);
110 113 }
111 114  
112 115 /**
... ... @@ -116,8 +119,9 @@ public class VOTableView extends JPanel implements TableModelListener {
116 119 * @param e The exception displayed in the log for debug.
117 120 */
118 121 public void displayError(String message, Exception e) {
  122 + String error_msg = "-- user error --\n%1s\nbecause:\n%2s\n-- end of user error --\n";
119 123 JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
120   - Log.LOGGER.log(Level.SEVERE, String.format(Log.ERROR_MSG, message, e.getMessage()));
  124 + logger.warn(String.format(error_msg, message, e.getMessage()));
121 125 }
122 126  
123 127 @Override
... ...