Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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
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 ...
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..
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.
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