【问题标题】:Jruby log4j integrationJruby log4j 集成
【发布时间】:2010-10-12 11:28:18
【问题描述】:

我目前正致力于将 Java 应用程序通用文本工程架构 (GATE) 与使用 JRuby 架构的 Rails 应用程序集成。当我们将 JRuby 与 log4j 集成时,我收到以下错误:

0 [main] DEBUG Main.class  - Hello world
gate/Gate.java:80:in `<clinit>': java.lang.NoClassDefFoundError: org/apache/log4

j/记录器 (NativeException) 来自 gateapp/Main.java:86:in `main' 来自 test.rb:12

test.rb 是 ruby​​ 程序的名称。

我尝试导入所有 log4j apache 库,并将类文件包含在 test.rb 文件中。

当我单独运行 Java 程序时,它运行良好。但是当我生成 jar 文件并将它们包含在 Ruby 文件 (test.rb) 中时,我收到了这个错误

java.lang.NoClassDefFoundError: org/apache/log4j/Logger (NativeException) problem is occuring. How to deal with this problem ?

【问题讨论】:

    标签: jruby


    【解决方案1】:

    您需要确保 log4j JAR 文件在您的类路径中。一种方法是在您的环境中设置 CLASSPATH 变量。另一种方法是在您的 ruby​​ 代码中调用 require ,例如

      require "/some/path/MyStuff.jar" 
    

    【讨论】:

      【解决方案2】:

      这是我使用 couchbase Java SDK 进行设置的配置

      include Java
      
      def setup_log4j
        java::lang.System.setProperty("net.spy.log.LoggerImpl", "net.spy.memcached.compat.log.Log4JLogger")
      
        fa = Java::OrgApacheLog4j::FileAppender.new();
        fa.setName("FileLogger");
      
        fa.setFile("./log/#{Rails.env}.log");
        fa.setLayout(Java::OrgApacheLog4j::PatternLayout.new("%d %-5p [%c{1}] %m%n"));
        fa.setThreshold(Java::OrgApacheLog4j::Level::INFO);
        fa.setAppend(true);
        fa.activateOptions();
        Java::OrgApacheLog4j::Logger.getRootLogger().addAppender(fa)
      end
      

      请注意,我之前需要 lo4j.jar 文件。
      值得一提的是有一个名为log4jruby的项目。

      【讨论】:

        猜你喜欢
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-15
        • 2015-07-08
        • 1970-01-01
        • 2018-10-18
        • 2012-02-19
        相关资源
        最近更新 更多