Java 请正确初始化log4j系统。在运行web服务时

Java 请正确初始化log4j系统。在运行web服务时,java,web-services,log4j,axis,Java,Web Services,Log4j,Axis,也许问这个看起来很傻,但我很困惑。我提到过,但似乎没有帮助 我已经编写了一个简单的web服务HelloWorld。在运行它的过程中,我得到了如下错误: log4j:WARN找不到记录器(org.apache.axis.transport.http.AxisServlet)的追加器。 log4j:警告请正确初始化log4j系统 我不知道为什么会这样 我正在使用Eclipse生成web服务,并部署在Tomcat6.0中。我查看并根据它们进行操作 log4j.configuration=log4j.p

也许问这个看起来很傻,但我很困惑。我提到过,但似乎没有帮助

我已经编写了一个简单的web服务HelloWorld。在运行它的过程中,我得到了如下错误:

log4j:WARN找不到记录器(org.apache.axis.transport.http.AxisServlet)的追加器。 log4j:警告请正确初始化log4j系统

我不知道为什么会这样

我正在使用Eclipse生成web服务,并部署在Tomcat6.0中。我查看并根据它们进行操作

log4j.configuration=log4j.properties 使用此系统属性指定Log4J配置文件的名称。如果未指定,则默认配置文件为log4j.properties。axis.jar中提供了log4j.properties文件

我在
axis.jar
中找不到log4j.properties


这方面有什么帮助吗?

您必须在classpath文件夹中创建自己的
log4j.properties

这些消息非常棘手,因此人们创建这些消息以使其更清晰:

它们的棘手之处在于,如果Log4j找不到它的
Log4j.properties
(或
Log4j.xml
)文件,而且如果该文件很好,很漂亮,但从配置的角度来看,它的内容不完整,则会编写警告

以下段落摘自此处:

通过使用附加器将日志输出写入目标。如果没有附加程序附加到类别或其任何祖先,则尝试登录时将收到以下消息:

Log4j没有默认的日志记录目标。用户有责任确保所有类别都可以继承appender。这可以通过向根类别附加一个appender来轻松实现

您可以在log4j中找到有关如何配置根记录器(
log4j.rootLogger
)的信息,基本上在文件开头添加了如下简单内容:

log4j.rootLogger=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
这应该清除启动时收到的警告消息(确保您没有名为
stdout
的appender;还要注意您给根记录器的级别,
debug
将非常冗长,应用程序中的每个库都将开始向控制台写入内容)

关于
log4j.properties
/
log4j.xml
,我建议您将此文件放在
/WEB-INF/classes
中,因为对于不同的调整(激活/停用日志、更改日志级别等),将其公开非常重要。您也可以将它放在类路径的JAR中(正如您在注释中所指定的),但它将被包含在存档中(希望在存档中的正确位置),并且不会像在
/WEB-INF/classes

中那样容易处理。警告:无法找到记录器的附件意味着您正在使用日志系统,但您尚未将任何附加程序(如FileAppender、ConsoleAppender、SocketAppender、SyslogAppender等)添加到配置文件中,或者配置文件丢失

配置log4j有三种方法:使用属性文件(
log4j.properties
),使用XML文件,并通过Java代码(
rootLogger.addAppender(new NullAppender());

如果存在属性文件(例如,在安装Solr时),则需要将此文件放在目录中

类路径 以下是一些如何确定类路径值的命令建议:

$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf
或者从Java:
System.getProperty(“Java.class.path”)

雄猫 如果您正在使用Tomcat,您可以将您的
log4j.properties
放入:
/usr/share/Tomcat?/lib/
/var/lib/Tomcat?/webapps/*/WEB-INF/lib/
文件夹

索尔 作为参考,Solr
log4j.properties
如下所示:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

如果类中存在下面的语句,那么log4j.properties应该位于java source(src)文件夹中,如果它是jar可执行文件,则应该打包在jar中,而不是单独的文件中

static Logger log = Logger.getLogger(MyClass.class);

谢谢,

好的,如果您已经创建了log4j.properties,那么您可以将其路径添加到类路径中,以便在执行过程中找到它。
是的,thingy将在类路径中搜索此文件。
既然您说您查看了axis,但没有找到,我假设您没有log4j.properties,所以这里有一个粗略但完整的示例
在某处创建并添加到类路径。例如,用c:/proj/resources/log4j.properties

在类路径中,您只需添加。。。。。。。;c:/proj/资源

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
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

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=c:/project/resources/t-output/log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

如果您使用的是
Logger.getLogger(ClassName.class)
,请将
log4j.properties
文件放在类路径中:

yourproject/javaresoures/src/log4j.properties (Put inside src folder)

您可以像上面的答案一样配置log4j.properties,或者使用
org.apache.log4j.BasicConfigurator

public class FooImpl implements Foo {

    private static final Logger LOGGER = Logger.getLogger(FooBar.class);

    public Object createObject() {
        BasicConfigurator.configure();
        LOGGER.info("something");
        return new Object();
    }
}
因此,在表下,配置do:

  configure() {
    Logger root = Logger.getRootLogger();
    root.addAppender(new ConsoleAppender(
           new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
  }

我明确地在axis.jar中添加了log4j.properties,对其进行了jared并上传到webservice中,但我遇到了相同的错误。在/WEB-INF/classes中创建一个新文件log4j.properties解决了我的问题。谢谢可能重复的
  configure() {
    Logger root = Logger.getRootLogger();
    root.addAppender(new ConsoleAppender(
           new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
  }