1 package atg.service.log;
2
3
4 /**
5 * Titre : Formateur de log<BR>
6 * Description : Formatte la sortie des logs<BR>
7 * <p>Copyright : FERRARI Olivier</p>
8 * @author BOSC Frédéric repris et modifié par FERRARI Olivier
9 * @version 1.0
10 * Ce logiciel est régi par la licence CeCILL soumise au droit français et
11 * respectant les principes de diffusion des logiciels libres. Vous pouvez
12 * utiliser, modifier et/ou redistribuer ce programme sous les conditions
13 * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
14 * sur le site http://www.cecill.info.
15 *
16 * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
17 * pris connaissance de la licence CeCILL, et que vous en avez accepté les
18 * termes.
19 */
20
21
22
23 public class AtgLogFormatter extends java.util.logging.SimpleFormatter {
24
25 //***************************************************************************
26 // Attributs
27 //***************************************************************************
28
29 /**
30 * Nom de la classe
31 */
32 protected static String className = null;
33
34 /**
35 * Formatage de la date
36 */
37 protected java.util.Date date;
38
39 /**
40 * Formatage de la date
41 */
42 protected static final String format = "{0,date} {0,time}";
43
44
45 /**
46 * Formatteur
47 */
48 protected java.text.MessageFormat formatter;
49
50 /**
51 * Formatteur
52 */
53 protected Object args[];
54
55 /**
56 * Saut de ligne
57 */
58 protected String lineSeparator;
59
60 /**
61 * Initialisation du nom de la classe (dynamique)
62 * package + nom de la classe
63 * Saut de ligne
64 */
65 static
66 {
67 className = (new AtgLogFormatter()).getClass().getName();
68 }
69
70
71
72 //***************************************************************************
73 // Constructeurs
74 //***************************************************************************
75
76 /**
77 * Constructeur
78 */
79 public AtgLogFormatter()
80 {
81
82 date = new java.util.Date();
83 args = new Object[1];
84 lineSeparator = (String)java.security.AccessController.doPrivileged(new sun.security.action.GetPropertyAction("line.separator"));
85 }
86
87
88 //***************************************************************************
89 // Méthodes publiques
90 //***************************************************************************
91
92 /**
93 * Retourne le message formaté
94 * @param logrecord Message
95 * @return String log formaté
96 */
97 public synchronized String format(java.util.logging.LogRecord logrecord)
98 {
99
100 StringBuffer stringbuffer = new StringBuffer();
101
102
103 date.setTime(logrecord.getMillis());
104 args[0] = date;
105
106
107 StringBuffer stringbuffer1 = new StringBuffer();
108 if(formatter == null)
109 formatter = new java.text.MessageFormat("{0,date} {0,time}");
110 formatter.format(args, stringbuffer1, null);
111
112
113 stringbuffer.append("Thread " + logrecord.getThreadID() + " - " + stringbuffer1 + " ");
114
115
116 stringbuffer.append(" (" + logrecord.getLevel().getLocalizedName() + " - " + logrecord.getLoggerName() + ") ");
117
118
119 if(logrecord.getSourceClassName() != null)
120 stringbuffer.append(logrecord.getSourceClassName());
121 else
122 stringbuffer.append(logrecord.getLoggerName());
123
124
125 if(logrecord.getSourceMethodName() != null)
126 stringbuffer.append(" " + logrecord.getSourceMethodName() + " ");
127
128
129 int lg = stringbuffer.length();
130 if (lg < 125)
131 for (int j=0; j < (125 - lg); j++)
132 stringbuffer.append(" ");
133
134
135 String s = formatMessage(logrecord);
136 stringbuffer.append(s);
137 stringbuffer.append(lineSeparator);
138
139
140
141 if(logrecord.getThrown() != null)
142 try
143 {
144 java.io.StringWriter stringwriter = new java.io.StringWriter();
145 java.io.PrintWriter printwriter = new java.io.PrintWriter(stringwriter);
146 logrecord.getThrown().printStackTrace(printwriter);
147 printwriter.close();
148 stringbuffer.append(stringwriter.toString());
149 }
150 catch (Exception exception)
151 {
152
153
154 }
155
156 return stringbuffer.toString();
157 }
158
159
160 //***************************************************************************
161 // Méthodes statiques
162 //***************************************************************************
163
164 /**
165 * Retourne la méthode appelante
166 * @return String Methode et numéro de la ligne
167 */
168 public static String getCallerMethod()
169 {
170 StackTraceElement astacklogelement[] = (new Throwable()).getStackTrace();
171 int i;
172
173
174
175 for(i = 0; i < astacklogelement.length; i++)
176 {
177 if(astacklogelement[i].getClassName().equals(className))
178 break;
179 }
180
181
182
183 for(; i < astacklogelement.length; i++)
184 {
185 if(! astacklogelement[i].getClassName().equals(className))
186
187 return astacklogelement[i+1].getMethodName() + ":" + astacklogelement[i+1].getLineNumber();
188 }
189
190 return "";
191 }
192 }