Configurar log4j e contar a exibicao dos INFOs no console

Olá a todos.
Eu estou implementando uma tela de login para uma aplicação que utiliza o hibernate.
Eu gostaria de apresentar um JProgressBar com a porcentagem (JProgressBar sem o setIndeterminate) referente a iniciação da minha SessionFactory.
Eu estou usando para isso o SwingWorker, mas para passar o % teria que usar:
setProgress(Math.round((float) i / n * 100) onde
i : poderia ser cada INFO do log4j que exibe no console quando inicia a SessionFactory.
n : total de INFOs que são apresentados quando inicia a SessionFactory.

A minha dúvida é como posso “contar” os INFOs que são exibidos quando inicia o Hibernate ?
Como configurar o log4j para isso ?

Obrigado.

Acho que achei uma solução. Só que vai abri e fechar uma sessao numa thread diferente da aplicação apenas para exibir o JProgressBar.

public class MyAppender extends AppenderSkeleton {
	
	private static final String DEFAULT_PATTERN = "%d{ABSOLUTE} %5p %c{1}:%L - %m%n";
	private JProgressBar jprogressbar;
	private int linhaAppend = 0;
	
	private final static int TAMLOGGER = 686;
	
	public MyAppender(JProgressBar jprogressbar) {
		this.jprogressbar = jprogressbar;
	}

	@Override
	protected void append(LoggingEvent event) {
		String formatted = getLayout().format(event);        
		jprogressbar.setValue(Math.round((float)linhaAppend/TAMLOGGER * 100));		
		linhaAppend++;
	}
	
	public Layout getLayout() {
		if (layout == null) {
			layout = new PatternLayout(DEFAULT_PATTERN);
		}
		return super.getLayout();
	}

	@Override
	public void close() {		
	}

	@Override
	public boolean requiresLayout() {		
		return true;
	}

}
public class JFrameAppender extends javax.swing.JFrame {
	private JPanel jPanel1;
	private JButton jBtnConsulta;
	private JProgressBar jPrgBar;
	private JPanel jPanelDentro;
	private Session sessao = null;
	private MyAppender appender;
	

	private static final Logger logger = Logger.getLogger(Main.class);
	
	public static void main(String[] args) {
		JFrameAppender inst = new JFrameAppender();
		inst.setLocationRelativeTo(null);
		inst.setVisible(true);		
	}
	
	private void initLogger() {
		appender = new MyAppender(jPrgBar);
		Logger.getRootLogger().addAppender(appender);
		logger.info("Log inicializado");
	}
	
	public void executeAction() {
		Runnable runnable = new Runnable() {
			public void run() {
				try {
					//abre e fecha uma sessao numa thread fora da thread de HibernateUtil
					sessao = HibernateUtil.getSession();
					sessao.close();
					appender.finalize();
				} catch (Exception e) {
					System.out.println("Erro Runnable " + e.getMessage());
				}
			}
		};
		Thread thread = new Thread(runnable);
		thread.start();
	}
	
	public JFrameAppender() {
		super();		
		initGUI();
		initLogger();
		executeAction();
	}
		
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
				jPanel1 = new JPanel();
				BorderLayout jPanel1Layout = new BorderLayout();
				jPanel1.setLayout(jPanel1Layout);
				getContentPane().add(jPanel1, BorderLayout.CENTER);
				{
					jPanelDentro = new JPanel();
					jPanel1.add(jPanelDentro, BorderLayout.CENTER);
					jPanelDentro.setPreferredSize(new java.awt.Dimension(384, 232));
					jPanelDentro.setLayout(null);					
				}
				{
					jPrgBar = new JProgressBar();
					jPrgBar.setStringPainted(true);
					jPanel1.add(jPrgBar, BorderLayout.NORTH);
					jPrgBar.setPreferredSize(new java.awt.Dimension(384, 31));
				}
			}
			pack();
			setSize(400, 300);
		} catch (Exception e) {		    
			e.printStackTrace();
		}
	}
	
}