sprabhakaran
sprabhakaran

Reputation: 1635

Logger creating too many files

I have writing standalone java tool. Below is my logger implementation code. I have face one issue in below code. Whenever i called ZRToolLogger.getLogger, a new file has been created. I need to maintain log information in single file. How can resolve this problem ?

I don't know the below implementation is correct or wrong. If wrong, pls let me know for another way to resolve this.

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

public class ZRToolLogger{
    public static Logger getInfoLogger(String loggerName)
    {
        LogManager logManager = LogManager.getLogManager();
        Logger logger = Logger.getLogger(loggerName);
        logger.setUseParentHandlers(false);
        FileHandler fh = null;
        try{
            fh = new FileHandler(ZRToolConstants.CTX_PATH+"/logs/log.%u.txt", true);
        }
        catch(IOException e)
        {
        }

        logManager.addLogger(logger);
        ZRToolLogFormatter formatterTxt = new ZRToolLogFormatter();

        if(fh != null)
        {
            fh.setFormatter(formatterTxt);
        }
        logger.addHandler(fh);

        return logger;
    }

    private static class ZRToolLogFormatter extends Formatter
    {
        public ZRToolLogFormatter()
        {
            super();
        }

        @Override
        public String format(LogRecord log)
        {
            return log.getLevel() + ":" + formatMessage(log)+"\n";
        }
    }
}

Thanks.

Upvotes: 2

Views: 1082

Answers (1)

Starbax
Starbax

Reputation: 1035

You have to make fh static.

public class ZRToolLogger{

public static FileHandler fh;
public static Logger getInfoLogger(String loggerName)
{
    LogManager logManager = LogManager.getLogManager();
    Logger logger = Logger.getLogger(loggerName);
    logger.setUseParentHandlers(false);

    if (ZRToolLogger.fh = null)
    {
        try{
            ZRToolLogger.fh = new FileHandler(ZRToolConstants.CTX_PATH+"/logs/log.%u.txt", true);
        }
        catch(IOException e)
        {
        }
    }
    logManager.addLogger(logger);
    ZRToolLogFormatter formatterTxt = new ZRToolLogFormatter();

    if(ZRToolLogger.fh != null)
    {
        ZRToolLogger.fh.setFormatter(formatterTxt);
    }
    logger.addHandler(fh);

    return logger;
}

private static class ZRToolLogFormatter extends Formatter
{
    public ZRToolLogFormatter()
    {
        super();
    }

    @Override
    public String format(LogRecord log)
    {
        return log.getLevel() + ":" + formatMessage(log)+"\n";
    }
}

}

Upvotes: 2

Related Questions