Log4jのインストール方法とエラーの原因について

このQ&Aのポイント
  • Log4Jをダウンロードして、インストール方法について説明します。
  • Log4Jのエラーが発生した場合の原因と対処方法について説明します。
  • Log4Jを使用する際の注意点と便利な機能について説明します。
回答を見る
  • ベストアンサー

Log4jのインストール

Java初心者です。Log4Jをダウンロードして、サンプルコードを実行しようとしているのですが、うまく行きません。インストール手順が何か足りないのでしょうか。 環境: OS=MacOSX Java-version=1.5.0_16 (1)Log4jをダウンロードし、解凍して、そのうちファイル名=log4j-1.2.15.jarをソースと同じディレクトリに置く (2)ウェブで探してきたテスト用のサンプルコード(下記参照)をlog4J.javaというファイル名で作成 (3)CLASSPATH=xxx.xxx(ソースのある絶対パス)/log4j-1.2.15.jar; export CLASSPATH を実行してクラスパスを通す (4)javac log4J.javaでコンパイル(エラーは出ず) (5)java log4Jを実行 Exception in thread "main" java.lang.NoClassDefFoundError: log4J 例外エラー発生。なぜだかお分かりでしょうか? import org.apache.log4j.*; public class log4J { static Logger logger = Logger.getLogger(log4J.class); public static void main(String[] args) { BasicConfigurator.configure(); logger.debug("Hello world."); logger.info("What a beatiful day."); } }

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

.javaファイルをコンパイルした時に、.classファイルが出来ている事と思いますが、 実行時に、この.clsssファイルが見つからないのだと思います。 環境変数 CLASSPATHに.classファイルがある場所を追加してあげましょう。

rio_grande
質問者

お礼

実行できました。有り難うございました。

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

Javaのソースは コンパイルしないと実行できないのだ

関連するQ&A

  • Log4Jではログを改行できない?

    お世話になっております。 ログ出力用として Log4J を利用しているのですが、 1つのログメソッドでログ内容を改行することはできないのでしょうか? 以下のコードにおいて、改行コードが半角スペースに変換されてログファイルに出力されてしまいます。 ※コードは省略しています。 import org.apache.log4j.Logger; protected static final Logger logger = Logger.getLogger(X.class.getName(), new Factoty()); logger.info(new StringBuilder() .append("xxxx").append("\r\n") .append("yyyy") .toString()); 【出力結果】 xxxx yyyy テキストエディタで検索をかけても、「xxxx」と「yyyy」の間は「半角スペース」で一致します。 環境は WindowsXP です。 ご存知のかたがいらっしゃればご教示お願いいたします。

    • ベストアンサー
    • Java
  • クラスパスの設定

    システム環境変数における設定 C:\java\pack1\sample1.jar C:\java\pack2\sample2.class があり、sample2.classのソースファイルが C:\java\pack3\sample2.java だとします。 さらにsample1.jarを解凍すると sample1\sample3.classにmainメソッドがあるものとします。 このとき、 sample2.classを実行するときにsample1.sample3をインポートできるようにする為には、sample2.classに import pack1.sample3; CLASSPATH C:\java\pack1\sample.jar でよいでしょうか?それともどこか間違っているでしょうか?

    • ベストアンサー
    • Java
  • javaの実行環境

    javaの勉強をしようと思い、以下のhelloworldコードを書いてみました。 public class HelloWorld { public static void main(String[] args) { System.out.print("Hello World\n"); } } それを、以下のようにlinux環境(ubuntu 10.10)でコンパイル実行しようとしたのですが、 javac HelloWorld.java java HelloWorld.class Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。そこで色々調べて jar cvmf manifest.mf test HelloWorld.class とjarファイルを作成して実行したところ、適切に"Hello World"が表示されました。 (manifest.mfの中身は"Main-Class: HelloWorld"1行だけです。) その後、このjarファイルをwindows環境に持っていって実行したのですが、 Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。 linux環境で、"echo $CLASSPATH"を実行しても何も表示されず、CLASSPATHはどこにも通っていないようです。 また、windows環境のDOS画面にてSETを実行し、環境変数を表示させてもCLASSPATHはありませんでした。(javaはインストール済みです。) で、質問です。 1)なぜjarにすると実行でき、classファイルのままでは実行出来なかったのでしょうか? 2)windows環境で、CLASSPATHを設定したほうが良いのでしょうか?設定する場合は、prgramfiles\java\binで良いのでしょうか? 以上、長くなり申し訳ないのですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • log4jでログレベルが取得できない。

    次のようなLOG4jの設定ファイルからログレベルを取得したいのですが うまく取得できません。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- 一般ログファイル出力 --> <appender name="LogFile" class="org.apache.log4j.FileAppender"> <param name="File" value="c:/TestLog4j.log"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %m (%F:%L) %c[%t]%n"/> </layout> </appender> <!-- 一般ログ出力設定 --> <logger name="clip"> <level value="DEBUG"/> <appender-ref ref="LogFile"/> </logger> </log4j:configuration> JAVAのソースは //ログ4j設定ファイル読み込み DOMConfigurator.configure("c:/log4j.xml"); //ロガーの取得 Logger batchLog = Logger.getLogger(getClass()); //テストログの出力 batchLog.fatal("テスト"); //ログレベルの取得 Level logLevel = batchLog.getLevel(); System.out.println(logLevel);   // 結果:null System.out.println(logLevel.toString()); // NullPointerExceptionでエラー テストログは出力できるのですが、ログレベルの取得で エラーになってしまいます。 log4jの設定ファイルからログレベルを取得するにはどうすれば 良いのでしょうか?

    • ベストアンサー
    • Java
  • ログについて

    プログラムを書いたのですが、ログをファイルで出力させたいと思いました。 (1)Loggerというクラスがあるのはわかったのですが、記述の仕方がよくわかりません。例えば、ソケット通信時にどのようなデータがどこに送られているかをログに取りたい場合はどこにどのように記述すればよいのでしょうか。 FileHandler handler = new FileHandler("/tmp/java.log"); Logger logger = Logger.getLogger("Sample"); handler.setFormatter(new SimpleFormatter()); logger.addHandler(handler); logger.setLevel(Level.ALL); try { ... DatagramSocket soc = new DatagramSocket(10000); DatagramPacket sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, remoteHost, destPort); soc.send(sendPacket); ... (2)アホな質問で恐縮ですが、ログというのは出力したい箇所に一つ一つ書いていかなければならないものなのでしょうか?そうするとプログラムが2倍近くの長さになりそうなのですが。。一旦書き上げたプログラムにちょろっと設定を足すだけで、メソッドを実行した箇所などを一括してログに取るようなことは出来ないのでしょうか?

    • ベストアンサー
    • Java
  • jarファイル内のクラスからjarファイル名の取得

    こんにちわ!yukimura1024です。 ちょっとわかりにくいタイトルかもですが質問です(^^; ○前提条件 1.コマンドプロンプトで以下のようにjarファイルを実行します。  java -jar xxx.jar xxx1 xxx2 2.xxx.jarのなかはx.class、y.class、z.class、と3つのクラスがあり、   x.classのmainメソッドが最初に呼び出されます。 ○質問 上記条件のとき、x.classのmainメソッド内で「xxx.jar」という文字列を取得したいのですが こんなことは可能でしょうか? なぜこんなことをしたいのかというと以下の理由からです。 1.xxx.jarのほかにyyy.jarというjarファイルも作成し、x.class、y.class、z.classを格納する。 2.yyy.jarも最初にx.classのmainメソッドが呼び出される。 3.x.classのmainメソッド内でxxx.jar、yyy.jarのどちらとして呼び出されたのか知りたい! ※2つのjarファイルに格納するx.class、y.class、z.classはまったく同じものです。 アドバイスいただける方いましたらお願いします。

    • ベストアンサー
    • Java
  • JAVA実行時のエラーメッセージについて

    コンパイル後、実行するとコードはどのようなものでも、同様のエラーメッセージが表示されます。 例えば、超基本の下記のソースでも表示されます。 //Sample01.java class Sample01 { public static void main (String args[]) { System.out.println("Hello World"); } } エラーメッセージは同様に、 「Excption in thread "main"java.lang.NoClassDefFoundError: Sample01」 と表示されてしまいます。 このエラーの対処方法をお願いします。

    • ベストアンサー
    • Java
  • Hello World さえも実行できないのですが

    DOSで実行しております。 コードは以下のとおりです。 ソースファイル名は sample.java class sample { public static void main(String args[]) { System.out.println("unko"); } } # javac sample.java のように、JDKの最新版を用いてコンパイルしたところ、 コンパイルエラーは表示されません。 # java sample と実行したところ次の用な実行エラーが表示されるのです。 Exception in thread "main" java.lang.NoClassDefFoundError: unko です。 本当に困り果てています。 どうか解決方法のご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • logback

    ServletでPGをしています。 そこでログを出力させようと思っていますが、うまくいきません。 【環境】 ・Windows Vista ・JavaServlet、JSP、WTP、Tomcat6.0、Java1.6 使用するロガーはLog4jにしようと思ったのですが、思い切ってlogbackを使いました。 slf4j-1.5.3、logback-0.9.9はサイトから取得解凍したものをそのままeclipseの[ビルドパス]のライブラリに外部JARの追加として入れています。 【ソース】 import org.slf4j.Logger; import org.slf4j.LoggerFactory; Logger log = LoggerFactory.getLogger(this.getClass()); ← ここでエラー!! log.debug("class - start"); 【エラーログ】 java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory LoggerFactoryが見つからないんでしょうか・・・。 一応参照ライブラリでclassは確認できています。 いろいろ調べたり試してはみたのですが、どうもうまくいきません。 どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • cygwinでjavaが動かない

    タイトル通りなのですがcygwin1.1上でjavaを動かそうとすると Exception in thread "main" java.lang.NoClassDefFoundError: Example1/java というエラーメッセージが出ます。 しかし、dosプロンプト上でならちゃんと動いたので プログラムのミスという訳でもないと思います。 以下がソースです。 class Example1 { public static void main(String args[]) { System.out.println("This is the output from Example1"); } } クラスパスは以下のような設定です。 /jsdk/lib/jsdk.jar:/jdk/lib/tools.jar:/tomcat/lib/jasper.jar:/tomcat/lib/servlet.jar:/tomcat/lib/webserver.jar:/tomcat/lib/xml.jar:./ 気になることが1つ。コンパイルだけはcygwin上でできるのです。 そしてcygwin上でコンパイルした.classファイルは dosプロンプトで無事に実行できました。 まとめるとcygwinという環境でコンパイルだけできて実行ができない しかしDOSプロンプトだとコンパイルも実行もできる、です。 目的はcygwin上でjavaを実行できるようにしたい、です。 環境は Windows98SE J2SDK1.3 J2EE1.2.1 Tomcat3.1.1 Cygwin1.1 bash 2.04.0(8)