Как использовать java.util.logger в веб-приложении? - PullRequest
4 голосов
/ 19 апреля 2011

Я пытаюсь использовать регистратор в веб-приложении. Я добавил FileHandler для записи журнала в файл. Теперь мне нужно использовать один и тот же обработчик для других классов / сервлетов в проекте, чтобы журналы всех классов записывались в один и тот же текстовый файл. Как мне этого добиться?

/***
 * Initialize a logger
 */
public static Logger logger;
static {
    try {
      FileHandler fh = new FileHandler("log.txt", true);
      fh.setFormatter(new SimpleFormatter());
      logger = Logger.getLogger(MyClass.class.getName());
      logger.addHandler(fh);
    }
    catch (IOException e) {
      e.printStackTrace();
    }
}

Нужно ли инициализировать регистратор и добавлять обработчик в каждом классе, как в коде выше? Любые другие методы?

Ответы [ 3 ]

3 голосов
/ 19 апреля 2011

Вы можете использовать файл logging.properties , чтобы глобально определить ваши обработчики для всего приложения. В этом файле вы можете точно настроить свои потребности в журнале.

Смотрите здесь или просто google для logging.properties .

Пример по ссылке выше:

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

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

java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

Вы даже можете настроить различные режимы ведения журнала для каждого из ваших веб-приложений, поместив logging.properties в WEB-INF / classes вашего веб-приложения.

3 голосов
/ 19 октября 2012
package package_name;

import java.io.IOException;

import java.util.Properties;

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;


public class Log {

public  Log() 
{
        Properties props = new Properties();
    try {
        props.load(getClass().getResourceAsStream("/log4j.properties"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    PropertyConfigurator.configure(props);//PropertyConfigurator.configure("log4j.properties");
}

public  Logger getLogger(Object obj) 
{
    Logger logger = Logger.getLogger(Object.class);
    return logger;
}

}

тогда мы должны сохранить файл log4j.properties в одном из наших пакетов, и этот файл должен выглядеть следующим образом:

log4j.properties

log4j.rootLogger=DEBUG, R,CA

log4j.appender.R = org.apache.log4j.DailyRollingFileAppender

log4j.appender.R.File = c:\\our project name+LOGSLIVE\\logs\\project short name.log

log4j.appender.R.Append = true

log4j.appender.R.DatePattern = '_'yyyy-MM-dd'.log'

log4j.appender.R.layout = org.apache.log4j.PatternLayout

#log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%t] [%p] %m%n

log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %5p [%t] (%F:%L) -  %m%n


#Console Appender

log4j.appender.CA=org.apache.log4j.ConsoleAppender

log4j.appender.CA.layout=org.apache.log4j.PatternLayout

log4j.appender.CA.layout.ConversionPattern=%5p [%t] (%F:%L) -  %m%n
3 голосов
/ 19 апреля 2011

Я хотел бы рассмотреть возможность использования каркаса журналирования, такого как Log4J.

Использование этого просто сводилось бы к настройке appenders (например, FileAppender) и уровней журнала в центральном файле (.xml или .properties) и в каждом классе, который должен определить регистратор, который вы просто делаете Log l = LogFactory.getLog(clazz); ( где clazz - класс, для которого вы определяете регистратор).

Вы можете сделать логгер общедоступным и использовать его из других классов, но я бы не рекомендовал это делать, поскольку вы обычно хотите знать, для какого регистратора (т. Е. Какого класса был определен этот регистратор) генерируется запись в журнале.

...