Получить местоположение файла журнала Java программно? - PullRequest
0 голосов
/ 27 мая 2019

Мое приложение создает файл журнала Java в

$HOME/javaN.log

, где N - целое число.Иногда запускается несколько экземпляров моего приложения, и каждый создает файл журнала с именем java1.log, java2.log и т. Д. Мне нужно знать во время выполнения, какой файл журнала используется приложением.

Есть ли способ определить местоположениелог файла программно?

Я определил свой регистратор в файле logging.properties как com.xyz.foo.Вот как выглядит logging.properties:

handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = WARNING

com.xyz.foo.level = FINEST

java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.level=FINEST
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tY:%1$tm:%1$td %1$tH:%1$tM:%1$tS[%4$s] %2$s%n%5$s%n%6$s%n
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

Эта строка

java.util.logging.FileHandler.pattern = %h/java%u.log

создаст файл журнала в домашней папке пользователя, как описано выше.

Создание и присвоение именфайла журнала обрабатывается средой Java автоматически в фоновом режиме.Он также автоматически разрешает возможные конфликты имен, если другой процесс уже создал файл журнала, например, если существует java0.log, то Logger создаст java1.log как файл журнала.

Я знаю, как явно установить файл журнала,Однако я предпочел бы сохранить механизм ведения журнала таким, какой он есть в настоящее время, и получить имя, выбранное Logger для файла журнала.

1 Ответ

0 голосов
/ 27 мая 2019

Вы можете заранее создать HashMap {"filename": FileHandler}, выбрать желаемое имя и записать данные

public class TestLogging {

    private static Logger logger = Logger.getLogger(TestLogging.class.getName());


    public static void main(String[] args) throws IOException {

        HashMap<String, FileHandler> logMap = new HashMap<String, FileHandler>();

        logMap.put("a", new FileHandler("E:/work-java/wgx/ff//a.log"));
        logMap.put("b", new FileHandler("E:/work-java/wgx/ff//b.log"));


        aLog(logMap, "a");
//         aLog(logMap, "b");


    }

    private static void aLog(HashMap<String, FileHandler> logMap, String key) {
        logger.addHandler(logMap.get(key));
        logger.logp(Level.INFO, "TestLogging.class", "main", "logging");
    }
}
  • Но Logger может выбрать только один FileHandler

результат

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
  <date>2019-05-27T21:49:34</date>
  <millis>1558964974608</millis>
  <sequence>0</sequence>
  <logger>com.huifer.TestLogging</logger>
  <level>INFO</level>
  <class>TestLogging.class</class>
  <method>main</method>
  <thread>1</thread>
  <message>logging</message>
</record>
</log>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...