@Startup @Singleton public class LogBean implements LogLocal { private static org.apache.log4j.Logger logger; private static final String LOG_DIR = "/var/emeklog"; private static final String LOG_FILENAME = "emek.log"; private static final String LOG_PATTERN = "%d{yyyyMMddHHmmss}\t%5p\t%m%n"; private static final int LOG_IO_BUFFER_SIZE_BYTES = 16384; private static final String ROLLOVER_PATTERN="'.'yyyyMMddHH"; @Override @PostConstruct public void postConstruct() { logger = org.apache.log4j.Logger.getLogger(LogBean.class); try { final File logDir = new File(LOG_DIR); logDir.mkdirs(); final File logFile = new File(logDir,String.format("%s%s",System.getProperty("file.separator"),LOG_FILENAME)); final org.apache.log4j.PatternLayout pl = new org.apache.log4j.PatternLayout(LOG_PATTERN); final org.apache.log4j.DailyRollingFileAppender dfp = new org.apache.log4j.DailyRollingFileAppender(pl,logFile.getCanonicalPath(), ROLLOVER_PATTERN); // we might not want immediate flush dfp.setImmediateFlush(true); dfp.setBufferedIO(false); dfp.setBufferSize(LOG_IO_BUFFER_SIZE_BYTES); logger.removeAllAppenders(); logger.setLevel(org.apache.log4j.Level.INFO); logger.addAppender(dfp); } catch (Exception e) { e.printStackTrace(System.err); } Logger.getLogger(LogBean.class.getName()).log(Level.INFO,"LogBean started."); } @Override @PreDestroy public void preDestroy() { Logger.getLogger(LogBean.class.getName()).log(Level.INFO, "LogBean thread destroyed."); } private StringBuilder formBuffer(String tag, String ipNum, String sessionId, String userAgent, String referrer, String sessionCookie) { StringBuilder sb = new StringBuilder(tag); sb.append("\t"); sb.append(ipNum); sb.append("\t"); sb.append(sessionId); sb.append("\t"); sb.append(sessionCookie); sb.append("\t"); sb.append(userAgent); sb.append("\t"); sb.append(referrer); sb.append("\t"); return sb; }