this is my wrapper class for Log4J: package com.uniserv.comn.logger; import org.apache.log4j.*; import java.util.*; import java.io.*;
public class Logger { private static boolean isInstantiated; private static Logger logger = null; private Category posTxtFileLog; private Category bosTxtFileLog; private Category bosJdbcLog; /** class constants **/ public static final int DEBUG = 0; public static final int INFO = 1; public static final int WARN = 2; public static final int ERROR = 3; public static final int FATAL = 4; private Logger() { posTxtFileLog = Category.getInstance( Logger.class.getName() + ". POSTXTLOG" ); bosTxtFileLog = Category.getInstance( Logger.class.getName() + ". BOSTXTLOG" ); bosJdbcLog = Category.getInstance( Logger.class.getName() + ". BOSJDBCLOG" ); Properties props = new Properties(); try { System.out.println("getting log4j.properties" ); props.load(new BufferedInputStream(this.getClass(). getResourceAsStream("log4j.properties"))); PropertyConfigurator.configure(props); } catch (IOException ioe) { ioe.printStackTrace(); } } public static Logger getInstance() { if ( logger == null ) { logger = new Logger(); } return logger; } public void logPOS( int iLevel, String message ) { switch(iLevel) { case DEBUG: posTxtFileLog.debug(message); break; case INFO: posTxtFileLog.info(message); break; case WARN: posTxtFileLog.warn(message); break; case ERROR: posTxtFileLog.error(message); break; case FATAL: posTxtFileLog.fatal(message); break; } } public void logBOS( int iLevel, String message ) { switch(iLevel) { case DEBUG: bosTxtFileLog.debug(message); bosJdbcLog.debug(message); break; case INFO: bosTxtFileLog.info(message); bosJdbcLog.info(message); break; case WARN: bosTxtFileLog.warn(message); bosJdbcLog.warn(message); break; case ERROR: bosTxtFileLog.error(message); bosJdbcLog.error(message); break; case FATAL: bosTxtFileLog.fatal(message); bosJdbcLog.fatal(message); break; } } } this is my log4j.properties #root category log4j.rootCategory=DEBUG, Appender2 log4j.category.Logger.POSTXTLOG=DEBUG, Appender2 log4j.category.Logger.BOSTXTLOG=DEBUG, Appender3 log4j.category.Logger.BOSJDBCLOG=DEBUG, Appender4 # Appender1 log4j.appender.Appender1=org.apache.log4j.ConsoleAppender log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout log4j.appender.Appender1.layout.ConversionPattern=%d [%t] %-5p %m%n # Appender2 log4j.appender.Appender2=org.apache.log4j.FileAppender log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout log4j.appender.Appender2.layout.ConversionPattern=%d [%t] %-5p %m%n log4j.appender.Appender2.File=F:\postxtlog.txt # Appender3 log4j.appender.Appender3=org.apache.log4j.FileAppender log4j.appender.Appender3.layout=org.apache.log4j.PatternLayout log4j.appender.Appender3.layout.ConversionPattern=%d [%t] %-5p %m%n log4j.appender.Appender3.File=F:\MyDocuments\LOG 4J Docu\Test Codes\bostxtlog. txt # Appender4 log4j.appender.Appender4=org.apache.log4j.jdbc.JDBCAppender log4j.appender.Appender4.URL=jdbc:postgresql://localhost:5432/testdb log4j.appender.Appender4.user=pau log4j.appender.Appender4.password=pau log4j.appender.Appender4.sql=INSERT INTO JDBCTEST (Message) VALUES ('%d - %c - %p - %m') the ejb that uses my logging class: public class TimeKeepingSessionEJB implements SessionBean { SessionContext ctx = null; EntityServices entityServices = new EntityServices(); LocalTimeKeeping timeKeeping = null; LocalTimeKeepingHome timeKeepingHome = null; Logger logger = Logger.getInstance(); /** * Default constructor */ public TimeKeepingSessionEJB() { } public void ejbRemove() {} public void ejbPassivate () {} public void ejbActivate() {} /** A method requirement of session bean.*/ public void ejbCreate() throws CreateException { try{ System.out.println("Inside ejbcreate:"); System.out.println("LOGGER OBJECT: " + logger ); logger.logPOS(Logger.DEBUG, "Inside ejbcreate() of TimeKeepingSessionEJB" ); ServiceLocator serviceLocator = ServiceLocator.getInstance(); timeKeepingHome = (LocalTimeKeepingHome) serviceLocator.getLocalHome(entityServices.TIME_KEEPING); } catch (Exception e) { // logger.logPOS(Logger.ERROR, "Exception @ ejbcreate(): " + e. getMessage() ); e.printStackTrace(); } } /** A method requirement of session bean.*/ public void setSessionContext(SessionContext oSessionContext) { this.ctx = oSessionContext; } /*********************for testing only*******************************/ public void getTimeKeeping() throws Exception { try { Context context = new InitialContext(); Object objRef = context.lookup("java:comp/env/ejb/TimeKeepingEJB"); timeKeepingHome = (LocalTimeKeepingHome) PortableRemoteObject.narrow(objRef, LocalTimeKeepingHome.class); } catch (Exception e) { System.out.println("Error TimeKeepingSessionEJB"); e.printStackTrace(); } } /*********************end of for testing only*******************************/ /** * addTimeKeeping(TimeKeepingVO timeKeepingVO) * @ param * TimeKeepingVO timeKeepingVO - Value Object for TimeKeeping. */ public TimeKeepingVO addTimeKeeping(TimeKeepingVO timeKeepingVO) throws AddException { try { // getTimeKeeping(); logger.logPOS(Logger.DEBUG, "addTimeKeeping: creating instance" ); timeKeepingHome.create(timeKeepingVO); return timeKeepingVO; } catch (Exception e) { e.printStackTrace(); throw new AddException(e.getMessage()); } } How do i configure Log4j inside JBoss? i find it weird that after JBoss deploys my application and when i run it the logging at the console stops. Instead, the JBoss logging continues inside F:\postxtlog.txt (defined as the file appender# 2 above ) and the comments i put inside my own methods ( e.g. logger. logPOS(Logger.DEBUG, "Inside ejbcreate() of TimeKeepingSessionEJB" ) ) were not reflected inside the said file. ************************************ Paulo A. Bengero Application Systems Engineer Team ORION ************************************
------------------------------------------------------------------------ FPI Gateway Scanner scanned email-body and no virus found ------------------------------------------------------------------------