View Javadoc
1   /*
2    * #%L
3    * IsisFish
4    * 
5    * $Id: SimulationLoggerUtilTest.java 4156 2014-12-09 11:27:18Z echatellier $
6    * $HeadURL: https://svn.codelutin.com/isis-fish/tags/isis-fish-4.4.0.2/src/test/java/fr/ifremer/isisfish/logging/SimulationLoggerUtilTest.java $
7    * %%
8    * Copyright (C) 2006 - 2010 Ifremer, Code Lutin
9    * %%
10   * This program is free software: you can redistribute it and/or modify
11   * it under the terms of the GNU General Public License as
12   * published by the Free Software Foundation, either version 3 of the 
13   * License, or (at your option) any later version.
14   * 
15   * This program is distributed in the hope that it will be useful,
16   * but WITHOUT ANY WARRANTY; without even the implied warranty of
17   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18   * GNU General Public License for more details.
19   * 
20   * You should have received a copy of the GNU General Public 
21   * License along with this program.  If not, see
22   * <http://www.gnu.org/licenses/gpl-3.0.html>.
23   * #L%
24   */
25  
26  package fr.ifremer.isisfish.logging;
27  
28  import java.io.File;
29  import java.util.ArrayList;
30  import java.util.List;
31  
32  import org.apache.commons.io.FileUtils;
33  import org.apache.commons.logging.Log;
34  import org.apache.commons.logging.LogFactory;
35  import org.apache.logging.log4j.Level;
36  import org.apache.logging.log4j.LogManager;
37  import org.apache.logging.log4j.Logger;
38  import org.junit.Assert;
39  import org.junit.Ignore;
40  import org.junit.Test;
41  
42  import fr.ifremer.isisfish.AbstractIsisFishTest;
43  
44  @Ignore
45  public class SimulationLoggerUtilTest extends AbstractIsisFishTest {
46  
47      static private final String category = "fr.ifremer.isisfish.logging";
48  
49      static private final String appenderId = category+"."+"myLogger_" + System.currentTimeMillis();
50  
51      static private Log log = LogFactory.getLog(category);
52  
53      @Test
54      public void testSimulationLoggerInfo() throws Exception {
55  
56          Log logInit = LogFactory.getLog(appenderId);
57          Log logInit2 = LogFactory.getLog(appenderId + ".hip");
58  
59          List<String> messagesToWrite = new ArrayList<String>();
60          List<String> messagesToSkip = new ArrayList<String>();
61  
62          logInfo(logInit, "before new config", null, null);
63          logInfo(logInit2, "before new config", null, null);
64          logInfo(log, "before new config", null, null);
65  
66          // use a logger we know to be scan as been keep for original level
67          Logger hibernatelog = LogManager.getLogger("org.hibernate");
68  
69          Level hibernateLogLevel = hibernatelog.getLevel();
70  
71          String loggerFile = new File(getTestDirectory(), SimulationLoggerUtilTest.class.getSimpleName() + "_" + System.nanoTime() + ".log").getAbsolutePath();
72  
73          // check hibernate level was not changed
74          Assert.assertEquals(hibernateLogLevel, LogManager.getLogger("org.hibernate").getLevel());
75          final Log logger = LogFactory.getLog(appenderId);
76  
77  
78          String message = "THIS LOG MUST NOT APPEAR IN FILE : hibernate logger's level was kept to his original level (" + hibernateLogLevel + ") ";
79          hibernatelog.info(message);
80          messagesToSkip.add(message);
81          message = "THIS LOG MUST APPEAR IN FILE : hibernate logger's level was kept to his original level (" + hibernateLogLevel + ") ";
82          // to be sure the message will be treated, use fatal level...
83          hibernatelog.fatal(message);
84          messagesToWrite.add(message);
85  
86          logInfo(logInit, "after new config using old logger", messagesToWrite, messagesToSkip);
87  
88          logInfo(logger, "after new config using new logger", messagesToWrite, messagesToSkip);
89          logInfo(log, "after new config using new logger", messagesToWrite, messagesToSkip);
90  
91          final String message0 = "BLOCK LOG must not appear in log file !!! since coming from another thread";
92          messagesToSkip.add(message0);
93  
94          // run a thread and try to logInfo from it
95          Thread t = new Thread(new Runnable() {
96              public void run() {
97                  // here we are try to logInfo in a bad thread should no appear
98                  // in logInfo file
99                  logger.info(message0);
100                 log.info(message0);
101             }
102         });
103         t.start();
104 
105         // it would really be nice to wait the thread, otherwise the test
106         // means nothing!!!
107         t.join();
108         Assert.assertTrue(!t.isAlive());
109 
110         message = "appender was destoyed WE MUST NOT SEE this message in simulation log file!!!";
111         logInit.info(message);
112         messagesToSkip.add(message);
113 
114         logInfo(logInit2, "ANOTHER CHANGE METHOD!!!", messagesToSkip, messagesToSkip);
115         logInfo(log, "ANOTHER CHANGE METHOD!!!", messagesToSkip, messagesToSkip);
116 
117         File logFile = new File(loggerFile);
118 
119         String logFileContent = FileUtils.readFileToString(logFile);
120 
121         log.info("++ File content ----------------------------------------------------------");
122         for (Object o : logFileContent.split("\n")) {
123             log.info(o);
124         }
125         log.info("-- File content ----------------------------------------------------------");
126         log.info("-- nb messages skipped : " + messagesToSkip.size());
127         log.info("-- nb messages written : " + messagesToWrite.size());
128 
129         System.out.println("test messages to be skipped");
130         for (String s : messagesToSkip) {
131             Assert.assertTrue("should not have write this entry : '" + s + "'", logFileContent.indexOf(s) == -1);
132         }
133 
134         System.out.println("test messages to be written");
135         for (String s : messagesToWrite) {
136             Assert.assertTrue("should have write this entry : '" + s + "'", logFileContent.indexOf(s) > -1);
137         }
138 
139         logFile.delete();
140 
141     }
142 
143     @Test
144     public void testSimulationLoggerDebug() throws Exception {
145 
146         Log logInit = LogFactory.getLog(appenderId);
147         Log logInit2 = LogFactory.getLog(appenderId + ".hip");
148 
149         List<String> messagesToWrite = new ArrayList<String>();
150         List<String> messagesToSkip = new ArrayList<String>();
151 
152         logDebug(logInit, "before new config", null);
153         logDebug(logInit2, "before new config", null);
154         logDebug(log, "before new config", null);
155 
156         // use a logger we know to be scan as been keep for original level
157         Logger hibernatelog = LogManager.getLogger("org.hibernate");
158 
159         Level hibernateLogLevel = hibernatelog.getLevel();
160 
161 
162         String loggerFile = "testLog.log";
163 
164         // check hibernate level was not changed
165         Assert.assertEquals(hibernateLogLevel, LogManager.getLogger("org.hibernate").getLevel());
166         final Log logger = LogFactory.getLog(appenderId);
167 
168 
169         String message = "THIS LOG MUST NOT APPEAR IN FILE : hibernate logger's level was kept to his original level (" + hibernateLogLevel + ") ";
170         hibernatelog.info(message);
171         messagesToSkip.add(message);
172         message = "THIS LOG MUST APPEAR IN FILE : hibernate logger's level was kept to his original level (" + hibernateLogLevel + ") ";
173         // to be sure the message will be treated, use fatal level...
174         hibernatelog.fatal(message);
175         messagesToWrite.add(message);
176 
177         logDebug(logInit, "after new config using old logger", messagesToWrite);
178 
179         logDebug(logger, "after new config using new logger", messagesToWrite);
180         logDebug(log, "after new config using new logger", messagesToWrite);
181 
182         final String message0 = "BLOCK LOG must not appear in log file !!! since coming from another thread";
183         messagesToSkip.add(message0);
184 
185         // run a thread and try to logInfo from it
186         Thread t = new Thread(new Runnable() {
187             public void run() {
188                 // here we are try to logInfo in a bad thread should no appear
189                 // in logInfo file
190                 logger.info(message0);
191                 log.info(message0);
192             }
193         });
194         t.start();
195 
196         // it would really be nice to wait the thread, otherwise the test
197         // means nothing!!!
198         t.join();
199         Assert.assertTrue(!t.isAlive());
200 
201         message = "appender was destoyed WE MUST NOT SEE this message in simulation log file!!!";
202         logInit.info(message);
203         messagesToSkip.add(message);
204 
205         logDebug(logInit2, "ANOTHER CHANGE METHOD!!!", messagesToSkip);
206         logDebug(log, "ANOTHER CHANGE METHOD!!!", messagesToSkip);
207 
208         File logFile = new File(loggerFile);
209 
210         String logFileContent = FileUtils.readFileToString(logFile);
211 
212         log.info("++ File content ----------------------------------------------------------");
213         for (Object o : logFileContent.split("\n")) {
214             log.info(o);
215         }
216         log.info("-- File content ----------------------------------------------------------");
217         log.info("-- nb messages skipped : " + messagesToSkip.size());
218         log.info("-- nb messages written : " + messagesToWrite.size());
219 
220 
221         for (String s : messagesToSkip) {
222             Assert.assertTrue(logFileContent.indexOf(s) == -1);
223         }
224 
225         for (String s : messagesToWrite) {
226             Assert.assertTrue(s, logFileContent.indexOf(s) > -1);
227         }
228 
229         logFile.delete();
230 
231     }
232 
233     private void logInfo(Log logger, String prefix, List<String> messagesToWrite, List<String> messagesToSkip) {
234         String message;
235 
236 
237         logger.debug(message = prefix + " debug");
238         if (messagesToWrite != null) {
239             messagesToSkip.add(message);
240         }
241 
242         logger.info(message = prefix + " info");
243         if (messagesToWrite != null) {
244             messagesToWrite.add(message);
245         }
246 
247         logger.warn(message = prefix + " warn");
248         if (messagesToWrite != null) {
249             messagesToWrite.add(message);
250         }
251 
252         logger.error(message = prefix + " error");
253         if (messagesToWrite != null) {
254             messagesToWrite.add(message);
255         }
256 
257         logger.fatal(message = prefix + " fatal");
258         if (messagesToWrite != null) {
259             messagesToWrite.add(message);
260         }
261     }
262 
263     private void logDebug(Log logger, String prefix, List<String> messagesToWrite) {
264         String message;
265 
266 
267         logger.debug(message = prefix + " debug");
268         if (messagesToWrite != null) {
269             messagesToWrite.add(message);
270         }
271 
272         logger.info(message = prefix + " info");
273         if (messagesToWrite != null) {
274             messagesToWrite.add(message);
275         }
276 
277         logger.warn(message = prefix + " warn");
278         if (messagesToWrite != null) {
279             messagesToWrite.add(message);
280         }
281 
282         logger.error(message = prefix + " error");
283         if (messagesToWrite != null) {
284             messagesToWrite.add(message);
285         }
286 
287         logger.fatal(message = prefix + " fatal");
288         if (messagesToWrite != null) {
289             messagesToWrite.add(message);
290         }
291     }
292 }