View Javadoc

1   package atg.service.log;
2   
3   import java.io.FileInputStream;
4   import java.util.Properties;
5   import java.util.StringTokenizer;
6   import java.util.logging.Handler;
7   import java.util.logging.Level;
8   import atg.service.constante.AtgConstantesWF;
9   
10  /**
11   * Titre : Manageur de logs<BR>
12   * Description : Gestion des logs<BR>
13   * Le chemin de logging.properties indiqué dans le fichier de constantes<br>
14   * est cherché d'abord dans le file system sinon dans le classpath du jar<br>
15   * <p>
16   * Copyright : FERRARI Olivier
17   * </p>
18   * 
19   * @author BOSC Frédéric repris et modifié par FERRARI Olivier
20   * @version 1.0 Ce logiciel est régi par la licence CeCILL soumise au droit
21   *          français et respectant les principes de diffusion des logiciels
22   *          libres. Vous pouvez utiliser, modifier et/ou redistribuer ce
23   *          programme sous les conditions de la licence CeCILL telle que
24   *          diffusée par le CEA, le CNRS et l'INRIA sur le site
25   *          http://www.cecill.info.
26   * 
27   * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez pris
28   * connaissance de la licence CeCILL, et que vous en avez accepté les termes.
29   */
30  
31  public class AtgLogManager {
32  
33  	// ***************************************************************************
34  	// Attributs
35  	// ***************************************************************************
36  
37  	/**
38  	 * Log par défaut
39  	 */
40  	protected static java.util.logging.Logger defaultLogger_ = null; // Log
41  
42  	// par
43  	// défaut
44  
45  	/**
46  	 * Table des initialisation des logs
47  	 */
48  	protected static java.util.Hashtable<String, String> logInit = null;
49  
50  	/**
51  	 * Chemin du fichier logging.properties
52  	 */
53  	protected static String pathFileProperties = null;
54  
55  	/**
56  	 * Proprietés des logs
57  	 */
58  	protected static Properties lesProperties = null;
59  
60  	/**
61  	 * Nom des Handlers à gèrer
62  	 */
63  	protected static String[] lesHandlers = null;
64  
65  	// ***************************************************************************
66  	// Méthodes statiques
67  	// ***************************************************************************
68  
69  	/**
70  	 * Contient l'initialisation des logs boolean Initialisation ou pas
71  	 */
72  	protected static boolean isInit = false;
73  
74  	/**
75  	 * Fixe le fichier de paramètrage
76  	 * 
77  	 * @param newPathFileProperties
78  	 *            Chemin du fichier logging.properties
79  	 */
80  	public static void setPathFileProperties(String newPathFileProperties) {
81  		pathFileProperties = newPathFileProperties;
82  	}
83  
84  	/**
85  	 * Initialise le manageur de logs
86  	 * Cherche d'abord logging.properties sur le filesystem sinon dans le classpath du jar
87  	 * @throws java.io.IOException
88  	 *             Impossible de lire le fichier
89  	 */
90  	public static void init() throws java.io.IOException {
91  		// Initialisation des properties
92  		lesProperties = new Properties();
93  		try {
94  			lesProperties.load(new FileInputStream(pathFileProperties));
95  		} catch (java.io.IOException e) {
96  			if (pathFileProperties.charAt(0) != '/'){
97  				pathFileProperties = "/"+pathFileProperties;
98  			}
99  			java.io.InputStream in = AtgLogManager.class.getResourceAsStream(pathFileProperties);
100 			if (in==null){
101 				throw (new java.io.IOException(pathFileProperties+ " n'est ni dans le File System ni dans le CLASSPATH"));
102 			}
103 			lesProperties.load(in);
104 		}
105 		// java.util.logging.Logger.getAnonymousLogger().log(java.util.logging.Level.
106 		// SEVERE, "Lectures des Handlers désirés ");
107 		StringTokenizer lesTokens = new StringTokenizer(lesProperties
108 				.getProperty("handlers"), ",");
109 		lesHandlers = new String[lesTokens.countTokens()];
110 		for (int i = 0; i < lesHandlers.length; i++) {
111 			lesHandlers[i] = lesTokens.nextToken().trim();
112 			// java.util.logging.Logger.getAnonymousLogger().log(java.util.logging.Level.
113 			// SEVERE, "-- Handler : " + lesHandlers[i]);
114 		}
115 		logInit = new java.util.Hashtable<String, String>();
116 	}
117 
118 	/**
119 	 * Retourne le log associée au nom
120 	 * 
121 	 * @param logName
122 	 *            Categorie du log
123 	 * @return java.util.logging.Logger Log associée à la categorie
124 	 */
125 	public static java.util.logging.Logger getLog(String logName) {
126 		// log initialisée ?
127 		if (!isInit) {
128 			try {
129 				init();
130 				isInit = true;
131 			} catch (Exception exception) {
132 				java.util.logging.Logger.getAnonymousLogger().log(
133 						java.util.logging.Level.SEVERE,
134 						"Impossible d'initialiser les logs", exception);
135 			}
136 		}
137 
138 		// recuperation du log
139 		java.util.logging.Logger logger = java.util.logging.Logger
140 				.getLogger(logName);
141 
142 		// initialisation du log
143 		if (logInit.get(logName) == null) {
144 			initLogger(logger, logName);
145 		} else {
146 			logInit.put(logName, "-");
147 
148 		}
149 		return logger;
150 	}
151 
152 	/**
153 	 * Retourne le log par défaut
154 	 * 
155 	 * @return java.util.logging.Logger Log par défaut
156 	 */
157 	public static java.util.logging.Logger getDefaultLog() {
158 		// log initialisé ?
159 		if (!isInit) {
160 			try {
161 				init();
162 				isInit = true;
163 			} catch (Exception exception) {
164 				exception.printStackTrace();
165 			}
166 		}
167 
168 		if (defaultLogger_ == null) {
169 			// recuperation du log par défaut
170 			defaultLogger_ = java.util.logging.Logger.getAnonymousLogger();
171 
172 			// initialisation du log
173 			if (logInit.get("java.util.logging.Logger.getAnonymousLogger()") == null) {
174 				initLogger(defaultLogger_, "");
175 			} else {
176 				logInit.put("java.util.logging.Logger.getAnonymousLogger()",
177 						"-");
178 			}
179 		}
180 
181 		return defaultLogger_;
182 	}
183 
184 	/**
185 	 * Initialise du log
186 	 * 
187 	 * @param logger
188 	 *            Log à initialiser
189 	 * @param logName
190 	 *            Catégorie du log associé
191 	 */
192 	protected static void initLogger(java.util.logging.Logger logger,
193 			String logName) {
194 		java.util.logging.ConsoleHandler consoleHandler = null;
195 		java.util.logging.FileHandler fileHandler = null;
196 
197 		logger.setUseParentHandlers(false);
198 		Level levelTemp = null;
199 
200 		// Réucpération du level pour ce logger
201 		if (lesProperties.getProperty(logName + ".level") != null) {
202 			levelTemp = Level.parse(lesProperties.getProperty(logName
203 					+ ".level"));
204 		}
205 		// on regarde si le level pas defaut existe
206 		else if (lesProperties.getProperty(".level") != null) {
207 			levelTemp = Level.parse(lesProperties.getProperty(".level"));
208 		} else {
209 			levelTemp = java.util.logging.Level.FINEST;
210 		}
211 		// On vide les Handlers
212 		Handler[] handlersTemp = logger.getHandlers();
213 		for (int h = 0; h < handlersTemp.length; h++) {
214 			logger.removeHandler(handlersTemp[h]);
215 		}
216 		logger.setLevel(levelTemp);
217 		// On parcour tout les handlers désirés et on les ajoute
218 		for (int i = 0; i < lesHandlers.length; i++) {
219 			if (lesHandlers[i]
220 					.compareToIgnoreCase("java.util.logging.ConsoleHandler") == 0) {
221 				// ajout de la console
222 				consoleHandler = new java.util.logging.ConsoleHandler();
223 				consoleHandler.setFormatter(new AtgLogFormatter());
224 
225 				consoleHandler.setLevel(levelTemp);
226 				logger.addHandler(consoleHandler);
227 			} else if (lesHandlers[i]
228 					.compareToIgnoreCase("java.util.logging.FileHandler") == 0) {
229 				// ajout du fichier
230 				try {
231 					// determination du nom du fichier
232 					String file = AtgConstantesWF.getValue("PATH_LOG_FILE");
233 					int posPoint = file.lastIndexOf(".");
234 					String realFile = file.substring(0, posPoint) + "-"
235 							+ logName + file.substring(posPoint, file.length());
236 
237 					// 500000 nombre de bytes par défaut écrit dans les fichiers
238 					// de logs
239 					if ((AtgConstantesWF.getValue("LOG_NB_BYTES_MAX") != null)
240 							&& (!AtgConstantesWF.getValue("LOG_NB_BYTES_MAX")
241 									.equals(""))) {
242 						fileHandler = new java.util.logging.FileHandler(
243 								realFile, (new Integer(AtgConstantesWF
244 										.getValue("LOG_NB_BYTES_MAX")))
245 										.intValue(), 2);
246 					} else {
247 						fileHandler = new java.util.logging.FileHandler(
248 								realFile, 500000, 2);
249 					}
250 					fileHandler.setFormatter(new AtgLogFormatter());
251 
252 					fileHandler.setLevel(levelTemp);
253 				} catch (java.io.IOException exception) {
254 					logger
255 							.severe("Impossible d'initialiser le fichier de log - "
256 									+ exception.getMessage());
257 				}
258 
259 				if (fileHandler != null) {
260 					logger.addHandler(fileHandler);
261 				}
262 			}
263 
264 		}
265 		logger.finest("Logger initialisé");
266 		/*
267 		 * java.util.logging.ConsoleHandler consoleHandler = null;
268 		 * java.util.logging.FileHandler fileHandler = null;
269 		 * 
270 		 * logger.setUseParentHandlers(false); // ajout de la console /* if
271 		 * (consoleHandler == null) { consoleHandler = new
272 		 * java.util.logging.ConsoleHandler(); consoleHandler.setFormatter(new
273 		 * AtgLogFormatter()); if (logger.getLevel() != null)
274 		 * consoleHandler.setLevel(logger.getLevel()); else
275 		 * consoleHandler.setLevel(java.util.logging.Level.FINEST); }
276 		 * logger.addHandler(consoleHandler); // ajout du fichier if
277 		 * (fileHandler == null) { try { // determination du nom du fichier
278 		 * String file = AtgConstantesWF.getValue("PATH_LOG_FILE"); int posPoint =
279 		 * file.lastIndexOf("."); String realFile = file.substring(0, posPoint) +
280 		 * "-" + logName + file.substring(posPoint, file.length()); // 500000
281 		 * nombre de bytes par défaut écrit dans les fichiers de logs if (
282 		 * (AtgConstantesWF.getValue("LOG_NB_BYTES_MAX") != null) &&
283 		 * (!AtgConstantesWF.getValue("LOG_NB_BYTES_MAX").equals(""))) {
284 		 * fileHandler = new java.util.logging.FileHandler(realFile, (new
285 		 * Integer(AtgConstantesWF.getValue("LOG_NB_BYTES_MAX"))). intValue(),
286 		 * 2); } else { fileHandler = new
287 		 * java.util.logging.FileHandler(realFile, 500000, 2); }
288 		 * fileHandler.setFormatter(new AtgLogFormatter()); if
289 		 * (logger.getLevel() != null) {
290 		 * fileHandler.setLevel(logger.getLevel()); } else {
291 		 * fileHandler.setLevel(java.util.logging.Level.FINEST); } } catch
292 		 * (java.io.IOException exception) { logger.severe("Impossible
293 		 * d'initialiser le fichier de log - " + exception.getMessage()); }
294 		 * 
295 		 * if (fileHandler != null) { logger.addHandler(fileHandler); } } }
296 		 */
297 	}
298 }