Java Logger不会记录

时间:2014-06-24 07:44:40

标签: java logging

能够通过研究和修改一些示例代码在日志文件中打印一些内容,但在运行包时,没有任何内容被打印到日志文件中。

主类(Client.java)

public class Client {
    static Logger LOGGER = Logger.getLogger(Client.class.getName());
    public static void main(String[] args) {
        Client logger = new Client();

        try {
            LogSetup.setup();
            emsSession = logger.Initialise();
            logger.getAllMEInfo();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("Problems with creating the log files");
        }

    }

    private void getAllMEInfo() {
       LOGGER.setLevel(Level.INFO);
       LOGGER.severe("Info Log");
       LOGGER.warning("Info Log");
       LOGGER.info("Info Log");
       LOGGER.finest("Really not important");
       // Some codes for the method
    }
}

LogSetup.java

import java.io.IOException;
import java.text.ParseException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;

public class LogSetup {
    static private FileHandler fileTxt;
    static private LogWriter formatterTxt;

    static public void setup() throws IOException, ParseException {
        Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
        Logger rootLogger = Logger.getLogger("");
        Handler[] handlers = rootLogger.getHandlers();

        if (handlers[0] instanceof ConsoleHandler) {
            logger.removeHandler(handlers[0]);
        }

        logger.setLevel(Level.SEVERE);
        fileTxt = new FileHandler(LogFile.txt");

        // create a TXT formatter
        formatterTxt = new LogWriter();
        fileTxt.setFormatter(formatterTxt);
        logger.addHandler(fileTxt);

    }

}

LogWriter.java

import java.text.SimpleDateFormat;

import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.LogRecord;

class LogWriter extends Formatter {
    public String format(LogRecord rec) {
        System.out.println("RECORDING..............");
        StringBuffer buf = new StringBuffer(1000);
        buf.append(rec.getLevel());
        buf.append(calcDate(rec.getMillis()));
        buf.append(formatMessage(rec));
        return buf.toString();
    }

    private String calcDate(long millisecs) {
        SimpleDateFormat date_format = new SimpleDateFormat("MMM dd,yyyy HH:mm\n");
        Date resultdate = new Date(millisecs);
        return date_format.format(resultdate);
    }

    public String getHead(Handler h) {
        return ("START " + new Date()) + "\n";
    }

    public String getTail(Handler h) {
        return "END " + new Date() + "\n";
    }
} 

日志打印START和END,但是甚至没有输入buff"" RECORDING .............."&#34 ;所以基本上没有记录任何东西。任何想法???

2 个答案:

答案 0 :(得分:0)

请在您的示例中添加include语句,以便其他人可以尝试您的代码。

如果您使用的是java.util.logging,请尝试迁移到logback。无需配置即可正确记录日志记录日志。如果您正在使用java.util.logging,那么您需要找到有关如何配置它的教程,就好像它没有配置它没有像您期望的那样记录。

答案 1 :(得分:0)

日志记录框架使用一个配置文件,你可以在其中设置“where和what”输出,对于java.util.logging,配置文件位于ur current jvm的文件夹lib下“/jdk1.xx/jre/lib /logging.properties“我分享我的链接问题是西班牙文config logging

简而言之,搜索下一行并更改信息 - > ALL

java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.level = ALL

在你的代码中你只需要记录你想要的消息,例如:

public class TestLog {
    private static final Logger log = Logger.getLogger(TestLog.class.getName());
    public static void doLog() {
        log.info("info log");
        log.fine("fine log");
        log.finer("finer log");
        .....
        log.severe("severe log");
    }
}

总是尝试使用精细,更精细或最好的用于调试消息,不要使用INFO,因为始终在默认配置上打印并且可以减慢应用程序