【问题标题】:Please initialize the log4j system properly. While running web service请正确初始化log4j系统。在运行 Web 服务时
【发布时间】:2011-09-30 07:52:40
【问题描述】:

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

我编写了一个简单的 Web 服务 HelloWorld。在运行它时,我收到类似这样的错误:

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

我不知道为什么会这样。

我正在使用 Eclipse 生成 Web 服务并部署在 Tomcat 6.0 中。我查看Axis Developer's Guide 并根据他们的说法

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

我在axis.jar 中没有找到 log4j.properties。

有什么帮助吗?

【问题讨论】:

标签: java web-services log4j axis


【解决方案1】:

您必须在类路径文件夹中创建自己的log4j.properties。

【讨论】:

  • 我在axis.jar中明确添加了log4j.properties,将其压缩并上传到网络服务中,但我遇到了同样的错误。
【解决方案2】:

这些消息有些棘手,以至于人们创建了它以使其更清晰: https://issues.apache.org/bugzilla/show_bug.cgi?id=25747

它们的棘手之处在于,如果 Log4j 找不到它的log4j.properties(或log4j.xml)文件,而且如果文件很好且花花公子但其内容从配置点来看不完整,则会写入警告观点。

以下段落摘自此处: http://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_9/docs/TROUBLESHOOT.html

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

log4j: No appenders could be found for category (some.category.name).
log4j: Please initialize the log4j system properly.

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

您可以在 log4j documentation 中找到有关如何配置根记录器 (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

这应该会清除您在启动时收到的那些 WARN 消息(确保您还没有名为 stdout 的附加程序;还要注意您为根记录器提供的级别,@987654330 @ 将非常冗长,并且您的应用程序中的每个库都将开始向控制台写入内容)。

关于log4j.properties/log4j.xml,我建议您将此文件放在/WEB-INF/classes 中,因为将其公开以进行不同的调整(激活/停用日志,更改日志级别等)很重要。您也可以将它放在类路径中的 JAR 中(正如您在评论中指定的那样),但它将包含在存档中(希望在存档中的正确位置)并且不会像它那样容易处理在/WEB-INF/classes。

【讨论】:

  • 创建一个新文件 log4j.properties 到 /WEB-INF/classes 解决了我的问题。谢谢!
【解决方案3】:

警告 No appenders could be found for logger 表示您正在使用log4j 日志系统,但您尚未添加任何 Appender(例如 FileAppender、ConsoleAppender、SocketAppender、SyslogAppender 等.) 放入您的配置文件或配置文件丢失。

可以通过三种方式配置 log4j:使用属性文件 (log4j.properties)、使用 XML 文件和通过 Java 代码 (rootLogger.addAppender(new NullAppender());)。

如果您有属性文件(例如在安装 Solr 时),您需要将此文件放在您的 classpath 目录中。

类路径

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

$ 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

【讨论】:

    【解决方案4】:

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

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

    谢谢,

    【讨论】:

      【解决方案5】:

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

      在您的类路径中,您只需添加 .......;c:/proj/resources

      # 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
      

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          您可以像上面的答案一样配置 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)));
            }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-13
            • 2018-06-28
            • 2018-05-18
            • 1970-01-01
            • 1970-01-01
            • 2010-11-11
            相关资源
            最近更新 更多