Avatar billede thomas_yde Nybegynder
01. oktober 2002 - 12:49 Der 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;

public class Log{
   
    public Log(){}
   
    public void makeLog(String logNavn, String logText)
    {
        try
        {
            File fil = new File("c:\\" + logNavn);
        }
        catch(Exception e)
        {
            System.err.print(e.getMessage());
        }
    }
   
    public static void main(String[] args)
    {
        Log l = new Log();
        System.out.println("Opretter filen...");
        l.makeLog("Log.txt", "test");
    }
}

logText bruges ikke til noget endnu.
Den skal bare oprette filen i første omgang.
Avatar billede dsj Nybegynder
01. oktober 2002 - 13:12 #1
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.
Avatar billede dsj Nybegynder
01. oktober 2002 - 13:13 #2
lige en ting...

"logFile" er i dit tilfælde "fil".
Avatar billede thomas_yde Nybegynder
01. oktober 2002 - 13:14 #3
det vil sige den først opretter filen når den begynder at skrive til den ?
Avatar billede dsj Nybegynder
01. oktober 2002 - 13:16 #4
Her fandt jeg faktisk en logger-klasse jeg har lavet, den kan det dú har brug for:

package dinpakke;

import java.text.SimpleDateFormat;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.util.Date;

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);
  }
}
Avatar billede dsj Nybegynder
01. oktober 2002 - 13:16 #5
ja det vil det...
Avatar billede carstenknudsen Nybegynder
01. oktober 2002 - 13:22 #6
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");
        }
    }
Avatar billede disky Nybegynder
01. oktober 2002 - 13:22 #7
Thomas:

I jdk1.4.0 findes java.util.Loggin klasserne det er et fuldbyrdigt og særdeles stærkt logging system, tag og brug det.

dsj:
Dit system er sikker fint, men SUN har lavet et meget stærkt system også :)
Avatar billede thomas_yde Nybegynder
01. oktober 2002 - 14:27 #8
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester