View Javadoc

1   /*
2    *  PCUServeur for the PCU project.
3    *  Copyright (C) 2010  PLU Julien
4    *
5    *  This program is free software: you can redistribute it and/or modify
6    *  it under the terms of the GNU General Public License as published by
7    *  the Free Software Foundation, either version 3 of the License, or
8    *  (at your option) any later version.
9    *  
10   *  This program is distributed in the hope that it will be useful,
11   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   *  GNU General Public License for more details.
14   *
15   *  You should have received a copy of the GNU General Public License
16   *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17   *  
18   *  For questions: julien.plu@redaction-developpez.com
19   */
20  package pcuserveur.lib;
21  
22  import java.io.File;
23  import java.io.IOException;
24  import java.text.DateFormat;
25  import java.text.SimpleDateFormat;
26  import java.util.Date;
27  import java.util.logging.FileHandler;
28  import java.util.logging.Handler;
29  import java.util.logging.Level;
30  import java.util.logging.Logger;
31  import java.util.logging.SimpleFormatter;
32  
33  /**
34   * @author PLU Julien
35   * @version 1.0 
36   * 
37   * <b> 
38   *     Cette classe permet de faire des log contenant les erreurs
39   *     et les messages généré par le serveur.
40   * </b>
41   * <p>
42   *     Un MonLog est caractérisé par les informations suivantes:
43   *     <ul>
44   *         <li>Une DateFormat pour la gestion des fichiers.</li>
45   *         <li>Un Handler pour la manipulation de fichiers.</li>
46   *         <li>Un Logger pour la gestion de l'écriture.</li>
47   *     </ul>
48   * </p>
49   * 
50   * @see GestionnaireConnexion
51   * @see Serveur
52   * @see Canal
53   */
54  public class MonLog {
55  	/**
56  	 * <p>
57  	 * Un handler pour la gestion des fichiers.
58  	 * </p>
59  	 */
60  	private Handler descripteur;
61  	/**
62  	 * <p>
63  	 * Une date pour connaître le jour des messages placés dans les logs.
64  	 * </p>
65  	 */
66  	private final DateFormat formatDate = new SimpleDateFormat ("dd-MM-yyyy"); //$NON-NLS-1$
67  	/**
68  	 * <p>
69  	 * Un logger pour l'écriture des logs dans les fichiers correspondants.
70  	 * </p>
71  	 */
72  	private Logger log;
73  
74  	/**
75  	 * <p>
76  	 * Constructeur par défaut.
77  	 * </p>
78  	 */
79  	public MonLog () {
80  		// Constructeur par défaut.
81  	}
82  
83  	/**
84  	 * <p>
85  	 * Construcuteur paramétré.
86  	 * </p>
87  	 * 
88  	 * @param nom
89  	 *            Nom du fichier créé.
90  	 */
91  	public MonLog (final String nom) {
92  		this.log = Logger.getLogger ("pcuserveur.lib.MonLog" + nom); //$NON-NLS-1$
93  
94  		this.log.setLevel (Level.ALL);
95  
96  		final String date = this.formatDate.format (new Date ());
97  
98  		try {
99  			final File logFile = new File ("." + File.separator + "Logs" + File.separator + date + "." + nom + ".log"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
100 
101 			if (!logFile.createNewFile ()) {
102 				this.descripteur = new FileHandler (logFile.getAbsolutePath (), true);
103 			}
104 			else {
105 				this.descripteur = new FileHandler (logFile.getAbsolutePath ());
106 			}
107 
108 		}
109 		catch (final SecurityException e) {
110 			Serveur.logServeur.logMessage ("Erreur de sécurité"); //$NON-NLS-1$
111 			Serveur.logServeur.logException ("MonLog", "MonLog", e); //$NON-NLS-1$ //$NON-NLS-2$
112 		}
113 		catch (final IOException e) {
114 			Serveur.logServeur.logMessage ("Erreur d'entrée sortie"); //$NON-NLS-1$
115 			Serveur.logServeur.logException ("MonLog", "MonLog", e); //$NON-NLS-1$ //$NON-NLS-2$
116 		}
117 		this.descripteur.setFormatter (new SimpleFormatter ());
118 		this.log.addHandler (this.descripteur);
119 	}
120 
121 	/**
122 	 * <p>
123 	 * Cette méthode permet de fermer proprement le fichier de log.
124 	 * </p>
125 	 */
126 	public void fermer () {
127 		this.descripteur.close ();
128 	}
129 
130 	/**
131 	 * <p>
132 	 * Cette méthode log une nouvelle exception.
133 	 * </p>
134 	 * 
135 	 * @param classe
136 	 *            La classe qui a générrer l'exception.
137 	 * @param methode
138 	 *            La méthode dans la classe qui a générer l'exception.
139 	 * @param exception
140 	 *            L'exception qui a été levée.
141 	 */
142 	public void logException (final String classe, final String methode, final Throwable exception) {
143 		this.log.throwing (classe, methode, exception);
144 	}
145 
146 	/**
147 	 * <p>
148 	 * Cette méthode log un nouveau message.
149 	 * </p>
150 	 * 
151 	 * @param message
152 	 *            Le message à écrire dans le log.
153 	 */
154 	public void logMessage (final String message) {
155 		this.log.info (message);
156 	}
157 }