Java утилита logging.properties: как войти в два разных файла - PullRequest
6 голосов
/ 04 сентября 2010

Я помещаю logging.properties в каталог WEB-INF / classes tomcat

Я хотел бы войти в два разных файла. Например: org.pkg1 идет в один файл, а org.pkg2 - в отдельный файл.

Я могу настроить один файл, но не два. Это возможно?

Ответы [ 5 ]

11 голосов
/ 08 сентября 2010

Я наконец понял это. В tomcat они расширяют ведение журнала утилит java ("JULI"), чтобы включить эту функцию. Вот файл logging.properties, который я поместил в каталог WEB-INF, и, наконец, выполнил то, что хотел после ......:

handlers=1console.java.util.logging.ConsoleHandler, 2jsp.org.apache.juli.FileHandler, 3financials.org.apache.juli.FileHandler
.handlers=1a.java.util.logging.ConsoleHandler

jsp.level=ALL
jsp.handlers=2jsp.org.apache.juli.FileHandler
org.apache.jasper.level = FINE
org.apache.jasper.handlers=2jsp.org.apache.juli.FileHandler
org.apache.jsp.level = FINE
org.apache.jsp.handlers=2jsp.org.apache.juli.FileHandler

com.paypal.level=ALL
com.paypal.handlers=3financials.org.apache.juli.FileHandler

3financials.org.apache.juli.FileHandler.level=ALL
3financials.org.apache.juli.FileHandler.directory=${catalina.base}/logs
3financials.org.apache.juli.FileHandler.prefix=financials.

2jsp.org.apache.juli.FileHandler.level=ALL
2jsp.org.apache.juli.FileHandler.directory=${catalina.base}/logs
2jsp.org.apache.juli.FileHandler.prefix=jsp.

1console.java.util.logging.ConsoleHandler.level=FINE
1console.java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
6 голосов
/ 03 июля 2015

Говоря о конфигурации logging.properties, я не нашел ни одного механизма для использования более одного аппендера. Я сделал простой обходной путь, который работает для меня.

public class CustomAFileHandler extends FileHandler {
   public DebugFileHandler() throws IOException, SecurityException {
      super();
   }
}

public class CustomBFileHandler extends FileHandler {
   public DebugFileHandler() throws IOException, SecurityException {
      super();
   }
}

И мои logging.properties

...
handlers=<pkg_name>.CustomAFileHandler, <pkg_name>.CustomBFileHandler, java.util.logging.ConsoleHandler

<pkg_name>.CustomAFileHandler.level=ALL
<pkg_name>.CustomAFileHandler.pattern=%h/A%u.log
<pkg_name>.CustomAFileHandler.limit=50000
<pkg_name>.CustomAFileHandler.count=1 
<pkg_name>.CustomAFileHandler.formatter=java.util.logging.SimpleFormatter


<pkg_name>.CustomBFileHandler.level=ALL
<pkg_name>.CustomBFileHandler.pattern=%h/B%u.log
<pkg_name>.CustomBFileHandler.limit=50000
<pkg_name>.CustomBFileHandler.count=1 
<pkg_name>.CustomBFileHandler.formatter=java.util.logging.SimpleFormatter
...
1 голос
/ 04 сентября 2010

Нет простого способа получить два обработчика одного типа с классами java.util.logging, которые имеют разные аргументы. Вероятно, самый простой способ сделать это - создать подкласс FileHandler в ваших logging.properties, который передает соответствующие аргументы для включения вашей регистрации, такие как:

org.pkg1.handlers=java.util.logging.FileHandler
org.pkg2.handlers=org.pkg2.FileHandler
java.util.logging.FileHandler.pattern="org_pkg1_%u.%g.log"
org.pkg2.FileHandler.pattern="org_pkg2_%u.%g.log"

орг / PKG2 / FileHandler.java:

package org.pkg2;

import java.util.logging.*;

public class FileHandler extends java.util.logging.FileHandler {
    public FileHandler() {
        super(LogManager.getLogManager().getProperty("org.pkg2.FileHandler.pattern"));
    }
}
0 голосов
/ 07 октября 2015

Имея ту же самую проблему с java.util.logging и не вполне удовлетворенный данными ответами, я только нашел в документацию :

2.2 Изменение конфигурации

Вот небольшая программа, которая динамически настраивает регистрацию Конфигурация для отправки вывода в определенный файл и получить много информация о вомбатах. Шаблон "% t" означает временную систему каталог.

public static void main(String[] args) {
        Handler fh = new FileHandler("%t/wombat.log");
        Logger.getLogger("").addHandler(fh);
        Logger.getLogger("com.wombat").setLevel(Level.FINEST);
        ...
    }

Итак, кажется, что вы не можете сделать это только из файла .properties, так как не можете создать экземпляры нескольких приложений, но вы можете сделать это программно. Также это должно быть возможно при использовании LoggerManager

0 голосов
/ 30 сентября 2014

Также возможно использование чистого jdk (попробуйте с jdk 7 или jdk 8).

Просто создайте собственный обработчик файлов;используйте это как «java.util.logging.FileHandler».

public class JULTestingFileHandler extends FileHandler {

    public JULTestingFileHandler() throws IOException, SecurityException 
    {
        super();    
    }
}

файл свойств пользователя;

com.xxx.handlers = com.xxx.JULXXXFileHandler

com.xxx.JULXXXFileHandler.pattern   = ./logs/test1_test2.%u.%g.log
...