#java #logging
#java #ведение журнала
Вопрос:
Удалось распечатать некоторые данные в файле журнала, изучив и изменив некоторые примеры кодов, но при запуске пакета ничего не печатается в файле журнала.
Основной класс (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:mmn");
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";
}
}
Журнал печатает НАЧАЛО и КОНЕЦ, но даже не входит в buff «»ЗАПИСЬ…………..»» так что в принципе ничего не регистрируется. Есть идеи???
Комментарии:
1. Какой фреймворк вы используете? slf4j? log4j ? java.util.logging ?
2. Я думаю, что OP использует
java.util.logging
3. java.util.logging. Я добавил #includes
Ответ №1:
Пожалуйста, включите инструкции include в свои примеры, чтобы другие могли попробовать ваш код.
Если вы используете java.util.logging
, попробуйте перейти к logback. Ведение журнала обратного входа будет регистрироваться правильно без настройки. Если вы используете java.util.logging, вам нужно будет найти руководство по его настройке, поскольку, если он не настроен, он не регистрируется, как вы ожидаете.
Ответ №2:
Платформа ведения журнала использует файл конфигурации, в котором вы можете задать «где и что» для вывода, для java.util.logging файл конфигурации находится в папке lib текущей jvm «/jdk1.x.x/jre/lib/logging.properties» Я делюсь своей ссылкой на проблемуведется ведение журнала конфигурации на испанском языке
Короче говоря, найдите следующую строку и измените INFO -> ALL
java.util.logging.ConsoleHandler.level=INFO java.util.logging.ConsoleHandler.level=ВСЕ
В вашем коде вам нужно только регистрировать сообщение, которое вы хотите, например:
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");
}
}
Всегда старайтесь использовать fine, finer или finest для сообщения отладки, не используйте INFO, потому что всегда печатайте в конфигурации по умолчанию и может замедлить работу приложения