Log4J - Protokollierung auf die GUI zaubern!

Bitte aktiviere JavaScript!
Status
Nicht offen für weitere Antworten.
Hallo zusammen,

also entweder ich stell mich zu dumm an oder es gibt keine Möglichkeit das gesamte Protokoll auf eine GUI auszugeben.
Ich find den Logger ganz schön handzuhaben möchte aber das Protokoll nicht in die Console oder auf File ausgeben sondern einfach in eine TextArea schreiben.

Gibts da doch ne Möglichkeit das zu realisieren?

Danke für eure Hilfe... :wink:
 
ohje.. kannst du mir da ein wenig helfen auf was ich da so achten muss? Zwecks Layout, Filter und was es da so gibt..
 
Layout und filter brauchst du erstmal nicht (da kann man die standards vom ConsoleAppender nehmen).

alles was du brauchst is ein appender an dem man eventListener andocken kann, dann brauchst du nur noch deine komponente auf die events reagieren lassen. dazu muestest du imho die doAppend methode ueberschreiben. schaue dir doch mal die sourcen eines implementierten appenders an
 
wen du mal auf der log4j seite eines der beiden deutschen "tutorials" anklickst wirst du 2 programme entdecken die glaube ich das machen was du möchtest :)
 
ja da war ich auch schon.. da wird zwar gezeigt dass es möglich ist, aber die Source entspricht nur normales Konsolen Logging..

also nicht wirklich eine Hilfe, wie das umzusetzen ist oder bin ich blind?!
 
kann sein das ich mich missverständlich ausgedrückt habe - bzw. einfach an deiner frage vorbeigeschossen bin ;-)

du schreibst die sachen weiterhin in eine textdatei - steht auf der seite ja aucm im source, somit haste recht!
was ich nur meinte ist, dass es spiezielle Programme gibt die dir das lesen der log dateien leichter machen und das
2 von ihnen auf der seite per screenshot gezeigt werden ... :D
 
achso alles klar.. mhh irgendwo muss es doch n beispiel geben wie ichs direkt auf die gui bringe... mit dem Appender selber schreiben komm ich nicht wirklich klar..

:-(
 
R

Roar

leite einfach von SkeletonAppender ab und überschreibe die doAppend() methode. Dort fügst du einfach die für dich relevanten informationen die du aus dem übergebenen objekt entnehmen kannst in irgendeine textarea ein. deinen appende fügst du dem logger mit addAppender() hinzu.
 
Roar hat gesagt.:
leite einfach von SkeletonAppender ab und überschreibe die doAppend() methode. Dort fügst du einfach die für dich relevanten informationen die du aus dem übergebenen objekt entnehmen kannst in irgendeine textarea ein. deinen appende fügst du dem logger mit addAppender() hinzu.
mh.. danke Roar..
ich glaub ich werds wohl ganz simpel lösen.. mir die Messages zusammenstellen und dann ausgeben ohne Log4J

weil habe halt das Problem, dass das JTextPane auf dem die Ausgabe erfolgen soll nicht in der Instanz ist, wo ich eigentlich protokolliere, sprich folgendes Schema:

Habe zwei Klassen:
FTP_GUI
FTP_Control

Auf der GUI werden Selektionen für die FTP Aktion gemacht, d.h. erst bei einer Bestätigung über einen Button wird über FTP_Control die Sitzung aufgebaut zu einem Server und Daten hin- und hergeschoben.

Soweit so gut - ich benutze für die FTP Sitzung das Package "edtftpj-1.5.1".
Dieses Package beinhaltet auch so eine eingeschränkte Log4J Version.

Außerdem gibt es einen FTPMessageCollector, der die Aktionen von FTP (Login, Upload, Download, wie man es halt von FTP kennt mitprotokolliert).

Im Demo von "edtftpj-1.5.1" werden dann die Logs mit dem "Log4J" Logger gemacht und auch die Messages von FTPMessageCollector ausgegeben.

Das ist so eigentlich wunderbar und wollte ich auch so handhaben - nur eben auf die GUI.

Nun hab ich halt ein JTextPane mit einem StyledDocument und das müsste halt zur Laufzeit von FTP_Control beschrieben werden.


hier mal kleine Coding-Auszüge:

Code:
public class FTP_Control {
    
    private Logger log = Logger.getLogger(FTP_Control.class);
    private FTPClient ftp;
    private FTPMessageCollector listener;
    
    /** Creates a new instance of FTP_Control */
    public FTP_Control(String host, String user, String password) {
        
        ftp = null;
        Logger.setLevel(Level.ALL);
        
        try {
            // set up client
            log.info("Connecting");

            ftp = new FTPClient(host);
            listener = new FTPMessageCollector();
            ftp.setMessageListener(listener);

             // login
            log.info("Logging in");
            ftp.login(user, password);

            // set up passive ASCII transfers
            log.debug("Setting up passive, ASCII transfers");
            ftp.setConnectMode(FTPConnectMode.PASV);
            ftp.setType(FTPTransferType.ASCII);

        } catch (Exception e) {
            e.printStackTrace();
        }
Code:
    private void startAction(String action)
    {
        int rc = this.checkInput();
        
        if (rc == 0){
        
            String log;
            FTP_Control ftp_control = new FTP_Control(host, user, password);
            ftp_control.setRoot();
        
            if (action == upload){
                
                if (this.getSelectedMode() == write){
                    ftp_control.upload(file_src.getText(), file_trg.getText(),false);
                }
                else if (this.getSelectedMode() == append){
                    ftp_control.upload(file_src.getText(), file_trg.getText(),true);
                }
            }
            else if (action == download){
                ftp_control.download(file_src.getText(), file_trg.getText());
            }
        
            ftp_control.exitClient();
            log = ftp_control.getLog();
      
            this.writeLog(log,regular);  
        }
    }
    
    private void writeLog(String logtext, String style)
    {
        try 
        {
            StyledDocument doc = jtp.getStyledDocument();
            doc.insertString(doc.getLength(),logtext,doc.getStyle(style));
            doc.insertString(doc.getLength(),newline,doc.getStyle(italic));
        } catch (BadLocationException ble) 
        { System.err.println("Couldn't insert initial text into text pane."); }          
    }
In der Methode startAction wird die Klasse FTP_Control aufgerufen und die Aktionen ausgeführt, zum Schluss hol ich mir hier momentan das Log vom FTPMessageCollector und schreibs auf das TJextPane mit der Methode writeLog

Hoff ihr versteht was ich meine und wo nun mein Problem liegt, eigentlich möcht ich zur Laufzeit von FTP_Control Kommentare aufs JTextPane ausgeben mit dem Log4J

das Package edtftpj-1.5.1 gäbs hier: www.enterprisedt.com/products/edtftpj/choose.html
 
Status
Nicht offen für weitere Antworten.
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben