Loggen mit log4j

Bei ihr funktioniert es ja auch. Die Ausgaben werden aber zusätzlich auf der Konsole ausgegeben, wenn ich es richtig verstanden hab. Jetzt wollte ich mal schauen, ob vielleicht ein ConsoleAppender in der Config-File deklariert ist.

MFG

Sascha
 
Kann natürlich sein wenn man noch zusätzlich ein Configfile lädt, ja.

rootLogger.removeAllAppenders() ;)
 
Darf ich fragen, warum du das Setup des Loggers programmatisch machen willst? Im Normalfall trägt man seine Applikation durch verschiedene Phase (Test, Integration, Produktivbetrieb). Da werden häufig extrem unterschiedliche Loggingkonfigurationen verwendet - daher gehört sowas meiner meinung nach in ein Konfigurationsfile: log4j.properties bzw. log4j.xml im Classpath. Wie das genau funktioniert steht in oben verlinktem Tutorial.

Zu deiner Frage, wie du an die Fehlermeldung kommst: im Normalfall wird eine Logausgabe notwendig, wenn ein bestimmtes Ereignis auftritt. Du hattest oben den Fall einer Socket Connection angesprochen. Hier hast du eigentlich zwei Fälle: wenn die Connection nicht aufgebaut werden kann fliegt im Allgemeinen eine Exception. Dann kannst du im catch-Block deinem Logger die Exception mitgeben:

Java:
...
} catch (IOException e) {
  logger.warn("Could not open socket connection: ", e);
}

Im Erfolgsfall schreibst du halt einfach "Created socket connection!" oder so in dein log.

Vielleicht noch ein paar Best Practices bzgl. Logging:

1. Benutz im Code nie die API eines konkreten Loggingproviders. Günstiger ist es, ein allgemeines Loggingframework wie commons-logging zu verwenden und dessen API zum Erzeugen von loggern zu nutzen. Commons-logging findet zur Laufzeit herraus, welche Logging API wirklich im Classpath liegt und benutzt diese.

Nochmal kurz: du brauchst Commons-Logging + den Logger deiner Wahl (hier wohl Log4j) im Classpath und verwendest im Code aber NUR commons logging.

2. Aufpassen bei teueren String Konkatenationen beim Bauen der Message
Grundsätzlich hat es sich als Best Practice etabliert Logausgaben so im Code zu schreiben:

Java:
if (log.isDebugEnabled()) {
  log.debug("Foo" + /*... ganz viele andere Strings */ + "Bar");
}

Der Grund ist, das dieses Zusammensetzen der String unter umständen recht teuer werden kann (z.B. wenn man auf vielen Objekten toString ruft). Da diese String unter umständen umsonst zusammengebaut werden (wenn z.B. das Level DEBUG gar nicht aktiv ist) baut man diese if-clause ein. Und da Softwareentwickler nichts mehr schätzen als Konsistenz mancht man das im Allgemeinen immer so :p.

Gruß
Ollie
 
So gehts auch, aber wäre natürlich sinnvoller, wenn man diesen aus der Config-File löscht, anstatt ihn erst hinzuzufügen und dann wieder zu entfernen. ;-)

MFG

Sascha
 
Ja an sich funktioniert es, bis auf das die Ausgabe auch in der Console erfolgt. Kann man das noch irgendwie unterdrücken? Und es kommt eine java.lang.NullPointerException wenn ich auf das Textfeld für den Namen zugreifen will.
Code:
String name = GUI.logdatei.getText();
 
Bitte meine Posts lesen.
Poste bitte mal die Config-Datei, wenn du eine hast.

Alleine an der geposteten Zeile, kann man nicht sagen, warum eine NullpointerException auftritt. Du solltest schon die Exception posten und den Quelltext der Klasse GUI.

MFG

Sascha
 
Ich hatte es vorher mit der der Config-Datei probiert, allerdings hat es nicht so recht funktioniert. (Habe mich ja wie gesagt schon mit Dokus auseinandergesetzt) Welche Zeile ist denn da jetzt überflüssig.

Das waren jetzt ganz schön viele Infos auf einmal*information overload*;)
 
Dann mach es einfach wie zeja gesagt hat. Entferne alle Appander.
Oder schau dir nochmal das mit den Configfiles an.

Du sagtest vorhin, dass eine NullPointerException auftritt. Dann solltest du die Exception und die Klasse GUI mal posten.

MFG

Sascha
 
Code:
package kernfunktion;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;


public class GUI extends JFrame implements ActionListener {
	
	private static final long serialVersionUID = -7157848825008430852L;
	
	private static final String konvertPath = "";
	
	private JPanel srcPanel;
	
	private JPanel srcPanel2;
		
	public static JTextField konvertierungsdatei;
	
	public static JTextField logdatei;
	
	private JButton konvert;
	
	
	public GUI(){
		this.setTitle("Konvertierungsplattform");		
		this.init();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
		this.setSize(600,200);
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation((dim.width - getWidth())/2, (dim.height - getHeight())/2);
		this.setVisible(true);
	}
	
	public void init(){
		
		this.getContentPane().setLayout(new BorderLayout());
		//Menu
		JMenuBar menuBar = new JMenuBar(); 
		JMenu file = new JMenu( "Datei" ); 
		menuBar.add( file ); 
		this.setJMenuBar(menuBar);
		
		Action exitAction = new AbstractAction( "Beenden" ) { 
			public void actionPerformed( ActionEvent e ) { 
				LogFileWrite.logger.debug("Anweisung: " + e.getActionCommand());
				System.exit( 0 ); 
			}
		} ;
		file.add( exitAction );
		
		JPanel center = new JPanel(new GridLayout(2, 1));

		this.srcPanel = new JPanel();
		this.srcPanel.setBorder(new TitledBorder("Quell-Datei"));
		this.konvertierungsdatei = new JTextField("", 30);
		JButton srcBrowse = new JButton("Durchsuchen");
		srcBrowse.setActionCommand("browseSrc");
		srcBrowse.addActionListener(this);

		this.srcPanel.add(this.konvertierungsdatei);
		this.srcPanel.add(srcBrowse);
		
		this.srcPanel2 = new JPanel();
		this.srcPanel2.setBorder(new TitledBorder("Log-Datei"));
		this.logdatei = new JTextField("", 30);
		JButton destBrowse = new JButton("Durchsuchen");
		destBrowse.setActionCommand("browseDest");
		destBrowse.addActionListener(this);

		this.srcPanel2.add(this.logdatei);
		this.srcPanel2.add(destBrowse);

		center.add(this.srcPanel);
		center.add(this.srcPanel2);
		this.getContentPane().add(center, BorderLayout.CENTER);
		
		JPanel south = new JPanel(new FlowLayout());

		this.konvert = new JButton("konvertieren");
		this.konvert.setContentAreaFilled(false);
		this.konvert.setFocusPainted(false);
		this.konvert.setActionCommand("konvert");
		this.konvert.addActionListener(this);
		
		south.add(this.konvert);
		this.getContentPane().add(south, BorderLayout.SOUTH);
			
	}

	public void actionPerformed(ActionEvent e){
		LogFileWrite.logger.debug("Anweisung: " + e.getActionCommand());
		if (e.getActionCommand().equals("browseSrc")){
			JFileChooser fc = new JFileChooser(konvertPath); 
			MyFileFiltertxt myfilefilter = new MyFileFiltertxt();
			fc.setFileFilter( myfilefilter); 
			int state = fc.showOpenDialog( null ); 
			if ( state == JFileChooser.APPROVE_OPTION )
			{ 
			File file = fc.getSelectedFile(); 
			konvertierungsdatei.setText( file.getName() ); 
			}
		}
		else if (e.getActionCommand().equals("browseDest")){
			JFileChooser fc = new JFileChooser(konvertPath); 
			MyFileFilterlog myfilefilter = new MyFileFilterlog();
			fc.setFileFilter( myfilefilter); 
			int state = fc.showOpenDialog( null ); 
			if ( state == JFileChooser.APPROVE_OPTION )
			{ 
			File file = fc.getSelectedFile(); 
			logdatei.setText(file.getName());
			}
		}
		else if (e.getActionCommand().equals("konvert")){
			
			TxtToIni test = new TxtToIni();
			
			try {
				test.dateiInArray(konvertierungsdatei.getText());
			} catch (FileNotFoundException e1) {
				LogFileWrite.logger.error("Datei nicht gefunden");
				JOptionPane.showMessageDialog( null, "Die Datei konnte nicht gefunden werden!" );
			} catch (IOException e1) {
				JOptionPane.showMessageDialog( null, e1.getMessage() );
			}
			
		}
	}

}

(die Pfade hab ich mal entfernt)
 

Neue Beiträge

Zurück