问题描述
|
我正在使用包含许多java类的程序包,其中定义了许多“ 0”对象。现在,我使用这些类编写自己的Java主类。如何打开日志信息?
我已经准备好log4j.properties文件。但是我不确定要使它生效必须在java主类中包括什么。
谢谢。
编辑
我的log4j.properties文件具有以下内容:
log4j.rootLogger = DEBUG,sysout
log4j.appender.sysout=org.apache.log4j.ConsoleAppender
log4j.appender.sysout.layout=org.apache.log4j.PatternLayout
包类使用记录器,如下所示:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
...
public class AClass {
private static final Log log = LogFactory.getLog(AClass.class);
log.debug(\"Some info \");
...
我在问我在主类中需要做什么才能在stdout中打印出日志记录信息。
解决方法
尽管可能,但您不在Java主类中这样做。您需要修改log4j.properties。
在属性文件中应该已经出现了一个根附加程序。将级别设置为DEBUG,您应该看到每条日志消息。我建议尽管先定义一个fileappender。这样,您可以使用自己喜欢的文本编辑器来浏览日志消息。
您应该为附加程序的PatternLayout定义转换模式。
例如:
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
尝试将以下代码添加到您的主类中
import org.apache.log4j.BasicConfigurator;
在main()中:
BasicConfigurator.configure();
这将使用简单的配置,该配置应将所有日志消息输出到控制台。根据Apache日志记录手册,您可以像下面这样将配置文件的名称作为参数发送:
import com.foo.Bar;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class MyApp {
static Logger logger = Logger.getLogger(MyApp.class.getName());
public static void main(String[] args) {
// BasicConfigurator replaced with PropertyConfigurator.
PropertyConfigurator.configure(args[0]);
logger.info(\"Entering application.\");
Bar bar = new Bar();
bar.doIt();
logger.info(\"Exiting application.\");
}
}
我假设记录器jar位于类路径中。我不了解apache日志记录框架,但Log4J会向控制台(或stderr)发送一条有关找不到配置文件的消息,根据发送到stdout的内容,它很容易被忽略。同样,(同样是log4j)属性文件所在的目录也必须位于CLASSPATH中。
我想到要仔细检查日志文件的预期名称。 Log4J使用log4j.properties,但这是Apache框架所期望的吗?无论哪种方式,都可以在实例化记录器时声明配置文件的名称。不知道方法名是什么。