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
35
36
37 /**
38 * Log par défaut
39 */
40 protected static java.util.logging.Logger defaultLogger_ = null;
41
42
43
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
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
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
106
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
113
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
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
139 java.util.logging.Logger logger = java.util.logging.Logger
140 .getLogger(logName);
141
142
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
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
170 defaultLogger_ = java.util.logging.Logger.getAnonymousLogger();
171
172
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
201 if (lesProperties.getProperty(logName + ".level") != null) {
202 levelTemp = Level.parse(lesProperties.getProperty(logName
203 + ".level"));
204 }
205
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
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
218 for (int i = 0; i < lesHandlers.length; i++) {
219 if (lesHandlers[i]
220 .compareToIgnoreCase("java.util.logging.ConsoleHandler") == 0) {
221
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
230 try {
231
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
238
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
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297 }
298 }