JAV - aktuelle Codezeile ausgeben

    JAV - aktuelle Codezeile ausgeben

    Hallo,
    und zwar habe ich hier mehrere Java-Klassen welche sich mehr oder weniger gegenseitig aufrufen.
    Es ist auch eine Loging Klasse dabei, welche Infos in ein Logfile schreibt.
    Diese enthält eine print funktion welche eine String als Parameter mitbekommt.
    Im Moment gebe icch dieses mit:

    Quellcode

    1. z12: printLog("BLINDTEXT"+Thread.currentThread().getStackTrace()[1].getLineNumber()); //Gibt BLINDTEXT und 12 (Zeilennummer) aus

    Nun das Funktioniert super in allen anderen Klassen auch.
    Ich möchte aber nicht immer ein so langes argument in meinem Code haben, deshlab hätte ich gerne eine Variable, welche IMMER die aktuelle Zeilennummer enthält.
    Mit

    Quellcode

    1. z4: int LineNumber = Thread.currentThread().getStackTrace()[1].getLineNumber();
    2. .
    3. .
    4. .
    5. z12: printLog("BLINDTEXT"+LineNumber); //Gibt BLINDTEXT und 4 (Zeilennummer) aus

    wird mir die Nummer 4 ausgegebenen. Das ist ja eig auch logisch :smile216:
    Wie kann ich das erreichen, dass mit LineNumber immer die aktuelle Zeile ausgegeben wird, also egal wo ich diese Variable zuweise

    Danke für alle antworten.
    Hallo,

    du hast nen kleinen Fehler drin, du verwendest getStackTrace()[1], was auf deine aktuelle Methode verweist, wenn du deine Logfunktion als statisch definierst, solltest du mit getStackTrace()[2] aufs richtige Ergebnis kommen.

    Quellcode

    1. package logger;
    2. public class LogIt {
    3. public static void printLog(String logText) {
    4. int line = Thread.currentThread().getStackTrace()[2].getLineNumber();
    5. System.out.println("Zeile " + line + ": " + logText);
    6. }
    7. }


    Damit solltest du jetzt überall folgendes machen können:

    Quellcode

    1. import logger.LogIt;
    2. ...
    3. logger.LogIt("Meldung 1");
    4. ...
    5. logger.LogIt("Meldung 2");


    Tschau
    Sven