Java 如何将log4j配置为只记录信息消息和更高版本?

Java 如何将log4j配置为只记录信息消息和更高版本?,java,log4j,Java,Log4j,我不使用config或xml文件来配置log4j,因为不需要深入配置它。我只需要将消息打印到控制台。所以我这样做: BasicConfigurator.configure(); Logger LOG = Logger.getLogger(MyClass.class) LOG.setLevel(Level.INFO); 要仅打印信息和更高级别的消息,我可以执行以下操作: BasicConfigurator.configure(); Logger LOG = Logger.getLogger(

我不使用config或xml文件来配置log4j,因为不需要深入配置它。我只需要将消息打印到控制台。所以我这样做:

BasicConfigurator.configure();
Logger LOG = Logger.getLogger(MyClass.class)
LOG.setLevel(Level.INFO);
要仅打印信息和更高级别的消息,我可以执行以下操作:

BasicConfigurator.configure();
Logger LOG = Logger.getLogger(MyClass.class)
LOG.setLevel(Level.INFO);
但尽管如此,我还是在控制台中看到了调试消息。但我只需要打印信息和错误消息

如何做到这一点

UPD:我创建了一个配置文件,其中包含,如本教程所述: 以下是:

  log4j.rootLogger=INFO, stdout

  # Direct log messages to stdout
  log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  log4j.appender.stdout.Target=System.out
  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L        %m%n

log4j.logger.com.messagedna.facade=INFO
log4j.logger.com.messagedna.receiver=INFO
log4j.logger.com.messagedna.util=INFO
log4j.logger.com.messagedna.parser=INFO
Properties props = new Properties();
try {
    props.load(new FileInputStream("/log4j.properties"));
    } catch (Exception e){
      LOG.error(e);
      }
PropertyConfigurator.configure(props);
log4j:WARN No appenders could be found for logger (com.messagedna.server.util.Config).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Properties props = new Properties();
props.load(new FileInputStream("/my/path/to/log4j.properties"));
PropertyConfigurator.configure(props);
我把它放到
com.messagedna

在我需要的每节课中,我都写了以下内容:

  log4j.rootLogger=INFO, stdout

  # Direct log messages to stdout
  log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  log4j.appender.stdout.Target=System.out
  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L        %m%n

log4j.logger.com.messagedna.facade=INFO
log4j.logger.com.messagedna.receiver=INFO
log4j.logger.com.messagedna.util=INFO
log4j.logger.com.messagedna.parser=INFO
Properties props = new Properties();
try {
    props.load(new FileInputStream("/log4j.properties"));
    } catch (Exception e){
      LOG.error(e);
      }
PropertyConfigurator.configure(props);
log4j:WARN No appenders could be found for logger (com.messagedna.server.util.Config).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Properties props = new Properties();
props.load(new FileInputStream("/my/path/to/log4j.properties"));
PropertyConfigurator.configure(props);
但当我运行我的应用程序时,我得到以下信息:

  log4j.rootLogger=INFO, stdout

  # Direct log messages to stdout
  log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  log4j.appender.stdout.Target=System.out
  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L        %m%n

log4j.logger.com.messagedna.facade=INFO
log4j.logger.com.messagedna.receiver=INFO
log4j.logger.com.messagedna.util=INFO
log4j.logger.com.messagedna.parser=INFO
Properties props = new Properties();
try {
    props.load(new FileInputStream("/log4j.properties"));
    } catch (Exception e){
      LOG.error(e);
      }
PropertyConfigurator.configure(props);
log4j:WARN No appenders could be found for logger (com.messagedna.server.util.Config).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Properties props = new Properties();
props.load(new FileInputStream("/my/path/to/log4j.properties"));
PropertyConfigurator.configure(props);

配置log4j.properties:

log4j.rootLogger=DEBUG, A1

log4j.logger.com.MYPACKAGE=INFO, A1

log4j.appender.A1=org.apache.log4j.ConsoleAppender

您只需为使用
MyClass.class
的记录器记录的消息设置级别,但是其他记录器上处于调试级别的任何消息仍将被打印

您真正需要做的是在控制台日志处理程序(负责将所有日志消息打印到控制台)上设置日志级别。但是,在使用
BasicConfigurator
时执行此操作将非常棘手,最好在属性文件中指定日志记录配置(这更灵活)

我建议您通过-这将帮助您准确地组合您想要的配置,并将证明您的时间是值得的投资。但是,如果要快速完成此操作,请尝试将以下内容添加到文件
log4j.properties
():

然后更改代码以执行以下操作:

  log4j.rootLogger=INFO, stdout

  # Direct log messages to stdout
  log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  log4j.appender.stdout.Target=System.out
  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L        %m%n

log4j.logger.com.messagedna.facade=INFO
log4j.logger.com.messagedna.receiver=INFO
log4j.logger.com.messagedna.util=INFO
log4j.logger.com.messagedna.parser=INFO
Properties props = new Properties();
try {
    props.load(new FileInputStream("/log4j.properties"));
    } catch (Exception e){
      LOG.error(e);
      }
PropertyConfigurator.configure(props);
log4j:WARN No appenders could be found for logger (com.messagedna.server.util.Config).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Properties props = new Properties();
props.load(new FileInputStream("/my/path/to/log4j.properties"));
PropertyConfigurator.configure(props);

因为您只想使用代码来完成它

这里有一个替代方案

在开始时执行此操作,静态代码初始化将起作用

logger = Logger.getLogger(Class.getName(), factory);
logger.setLevel(Level.INFO);

尽管如此,没有理由不使用log4j.xml。它很容易使用。

我明白了。我应该把这个文件放在哪个地方?对于我使用logger的软件包?好吧,听着:但我不推荐它,为什么在不需要的时候把一切都复杂化呢it@NikitinMikhail在代码中包含这一点似乎更简单,但您会发现将配置移动到文件中会更加强大和灵活(随着应用程序的增长,这将变得越来越有用)实际上,使用配置文件并不费多大力气。因为您的项目需要配置文件@robjohncox为您提供了另一种选择,我在哪里可以获得属性?这可以在
java.util.Properties
-很抱歉,如果我使用您的变体,我会得到以下信息:log4j:WARN无法找到记录器的附加器(com.messagedna.server.util.Config)。log4j:警告请正确初始化log4j系统。log4j:有关更多信息,请参阅警告。根据错误中的链接,当找不到配置文件时,会发生“找不到记录器的附加器”的情况-您是否正确设置了文件的路径?配置正在设置根日志记录程序,因此如果配置为read,则日志记录程序应该有一个appender
com.messagedna.server.util.Config
。好的,我为每个类配置了设置,但仍然有相同的输出您的log4j位于文件系统的根目录下?!我不能用这样的概念来操作。你是说配置文件在哪里还是其他什么地方?你指的是哪个工厂?实现LoggerFactory的任何类