01. oktober 2002 - 12:49Der er
5 kommentarer og 3 løsninger
Oprettelse af fil i Java
Hejsa jeg har et lille problem. Jeg vil gerne lave et log system til et webbaseret program. Men for at det kan komme til at virke skal den kan oprette en log fil. jeg har en lille kode stump her men jeg synes ikke den virker særlig godt: import java.io.File;
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du begynder bare at skrive til den, så oprettes den af sig selv:
PrintWriter writer; FileWriter fileWriter = new FileWriter(logFile, true); writer = new PrintWriter(fileWriter, true); writer.println("Et eller andet...");
I ovenstående eksempel anvendes en PrintWriter til at skrive til filen. Ved "PrintWriter(fileWriter, true);" betyder true, at der tilføjes i enden af filen, hvis den allerede eksisterer.
public class Logger { private static int mode = 1; private static SimpleDateFormat formater; private static File logFile; private static PrintWriter writer;
/** * Sætter hvordan der skal logges: * <br>0 - Log slet ikke * <br>1 - Udskriv kun til konsol * <br>2 - Udskriv kun til logfil * <br>3 - Udskriv både til konsol og logfil * @param mode Måden hvorpå der skal logges */ public static void setMode(int mode) { if (mode > 3) mode = 1; Logger.mode = mode; if(mode == 2 || mode == 3) openLogFile(); formater = new SimpleDateFormat("d/MM-yyyy HH:mm"); }
/** * Logger en besked; ingen kilde logges. * @param message Den besked der skal logges */ public static void log(String message) { String line = formater.format(new Date(System.currentTimeMillis()))+message; if(mode == 1 || mode == 3) System.out.println(line); if(mode == 2 || mode == 3) writeLine(line); }
/** * Logger en besked. * @param entity En kilde til meddelelsen angives efter eget valg * @param message Den besked der skal logges */ public static void log(String entity, String message) { String line = formater.format(new Date(System.currentTimeMillis()))+" ["+entity+"] "+message; if(mode == 1 || mode == 3) System.out.println(line); if(mode == 2 || mode == 3) writeLine(line); }
/** * Logger en besked. * @param obj Det objekt meddelelsen er logget fra * @param message Den besked der skal logges */ public static void log(Object obj, String message) { String line = formater.format(new Date(System.currentTimeMillis()))+" ["+obj.getClass().getName()+"] "+message; if(mode == 1 || mode == 3) System.out.println(line); if(mode == 2 || mode == 3) writeLine(line); }
/** * Logger en fejl; skriften i konsol er rød. * @param entity En kilde til fejlen angives efter eget valg * @param message */ public static void logError(String entity, String message) { String line = formater.format(new Date(System.currentTimeMillis()))+" ["+entity+"] "+message; if(mode == 1 || mode == 3) System.err.println(line); if(mode == 2 || mode == 3) writeLine(line); }
/** * Logger en fejl; skriften i konsol er rød. * @param obj Kilden til fejlen (det objekt fejlen skete i) * @param message Den meddelelse der skal logges */ public static void logError(Object obj, String message) { String line = formater.format(new Date(System.currentTimeMillis()))+" ["+obj.getClass().getName()+"] "+message; if(mode == 1 || mode == 3) System.err.println(line); if(mode == 2 || mode == 3) writeLine(line); }
/** * Åbner en logfil med dato og år som filnavn. Findes filen allerede, tilføjes blot i enden af filen. */ public static void openLogFile() { SimpleDateFormat format = new SimpleDateFormat("d-MM-yyyy"); logFile = new File( "./"+format.format( new Date(System.currentTimeMillis()) )+".log" ); try { FileWriter fileWriter = new FileWriter(logFile, true); writer = new PrintWriter(fileWriter, true); writer.println(); } catch (IOException ioe) { System.err.println("[expnote.util.Logger] Error while opening logfile: "+ioe.getMessage()); } }
/** * Skriver en linie til logfilen. * @param line Den linie der skal skrives */ private static void writeLine(String line) { writer.println(line); } }
Den mest fleksible løsning får du ved at benytte den nye java.util.logging pakke, der er ny i Java 1.4. Med den kan du kontrollere forskellige niveauer af logging, således at du f.eks. kun får de mest grelle fejlbeskeder, hvorimod de mere finkornede log beskeder sorteres fra, og det uden at du skal rekompilere din kode. Nedenstående eksempel er fra Java almanac 1.4 (der stærkt kan anbefales). import java.io.*; import java.util.logging.*;
public class BasicLogging { public static void main(String[] args) { // Get a logger; the logger is automatically created if // it doesn't already exist Logger logger = Logger.getLogger("DitKlasseEllerPakkeNavn"); // Set the level to a particular level logger.setLevel(Level.INFO);
// Set the level to that of its parent logger.setLevel(null);
// Turn off all logging logger.setLevel(Level.OFF);
// Turn on all logging logger.setLevel(Level.ALL);
// Log a few message at different severity levels logger.severe("my severe message"); logger.warning("my warning message"); logger.info("my info message"); logger.config("my config message"); logger.fine("my fine message"); logger.finer("my finer message"); logger.finest("my finest message"); } }
Tak skal i have, det virker næsten nu. Mit eneste problem er min Date funktion ikke kan datoen, den skriver en underlig værdi ud. :)
Men angående loggin systemet så er det en mægtig god ide, men jeg skal sådan set kun bruge det til at checke errors på mine JSP klasser / controller klasser. I det de ligger på en web-server hvor jeg ikke kan se consol vinduet. :)
Så det her var en lille hurtig løsning.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.