• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jarファイルとして作成されたJavaのログ出力)

Javaのログ出力に関する質問

このQ&Aのポイント
  • Javaで作成されたバッチプログラムをWindows2008サーバーのタスクスケジューラから呼び出して実行する際に、ログが出力されない問題が発生しました。ログはLog4j(xml)で出力しており、正しく設定されているはずですが、なぜ出力されないのか教えてください。
  • 問題の環境は以下の通りです。Javaプログラム(Hoge.java)には、DBアクセスするプログラムが含まれています。ログはlog.info("文字列");のように記述されています。Hoge.javaはHoge_batch.jarとしてjarファイル化されています。また、ログはlog4j.xmlに以下のように設定されています。
  • ログの出力先はc:\log\trace.logですが、実行するとログが出力されません。Windows2008サーバーからパワーシェルを呼び出し、パワーシェル内でcall.batを実行して、その中で「java -cp Hoge_batch.jar jp.co.company.batch.hoge」としてJavaプログラムを呼び出しています。Hoge.javaの処理は正常に動作しており、ログファイルの出力先も正しく設定されているはずですが、なぜログが出力されないのかわかりません。お手数ですが、ご教示いただければ幸いです。

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

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

> call.batの記述で、java -cp Hoge_batch.jar jp.co.company.batch.hoge >> c:\log\hoge.log これができるなら call.batの記述で、java -cp Hoge_batch.jar jp.co.company.batch.hoge >>c:\log\hoge.log 2>>c:\log\error.log してしまえばいいのでは?

t_hirai
質問者

お礼

teketonさん はい。最悪はその方法で考えていますが、 他のプログラムはlog4jを使用しているので、合わせる必要があります。どうしても無理であれば、 >>と、2>> で行うしかないと考えています。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

タスクスケジューラーから実行するユーザー権限に、 ログフォルダ、ファイルへのアクセス権限が不足しているのでは?

t_hirai
質問者

お礼

回答ありがとうございます。 call.batの記述で、java -cp Hoge_batch.jar jp.co.company.batch.hoge >> c:\log\hoge.log と記述すると、標準出力のログは出力されるので、権限はあるのかなと思っています。 他にも可能性がありましたら教えてください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • log4jのレベルをdebugにすると大量のdigesterログが出力されます

    お世話になります。 現在、tomcat5.5でservletを動作させています。動作ログ(デバッグレベル)を出力させるためにorg.apache.commons.logging.impl.Log4JLoggerを使用しています。 ところがlog4j.xmlの設定で出力レベルを"debug"とするとdigesterやConvertUtilBeanなどのデバッグレベルログが勝手に出力されてしまい、本来出力させたいデバッグログが埋もれてしまいます。 これらの不要なデバッグレベルログを抑制する方法をご存じの方よろしくお願いいたします。 以下、log4j.xmlです(抜粋) <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p (%F:%L) - %m%n" /> </layout> </appender> <appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="log/trace.log"/> <param name="Append" value="true" /> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p (%F:%L) - %m%n" /> </layout> </appender> <category name="sample"> <priority value="trace"/> </category> <root> <priority value="trace" /> <appender-ref ref="stdout" /> <appender-ref ref="fileAppender" /> </root>

    • ベストアンサー
    • 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
  • Java ログ出力方法

    バッチプログラムを作成中なのですが、ログの出し方で悩んでいます。 ログファイルを「バッチID」と「処理日付」の組み合わせで動的に変更したいと思っています。 また、ログは各クラスで出力したいと思っています。 悩んでいる箇所は ・どのようにしてバッチIDを動的に取得してログファイル名として設定するか ・複数のパッケージのクラスを使用するバッチの一連の処理をどのようにして一つのログファイルに出力するか の2点あり、対応方法が検討もつかない状態です。 使用しているライブラリはlog4j 1.2.16.jarです。 アドバイスをいただけないでしょうか。 よろしくお願いいたします。 例として、下記のようなバッチを考えています。 foo.bar.mainパッケージにはpublic static void main(String[] args)のメソッドをもつクラスを配置します。 foo.bar.commonパッケージにはfoo.bar.mainに配置したクラスから共通で利用する処理を実装したクラスを配置します。 foo.bar.main +- Batch1.class +- Batch2.class ・ ・ ・ foo.bar.common +- Common1.class +- Common2.class +- Common3.class ・ ・ ・ 処理の流れで言うと、 Batch1を実行する場合 1. javaコマンドでBatch1実行、Batch1クラスでログを出力 2. Batch1からCommon1クラスのメソッドを実行、Common1クラスでログを出力 3. Batch1からCommon2クラスのメソッドを実行、Common2クラスでログを出力 4. 処理終了 ログは「Batch1_20120612.log」に全て出力される。 Batch2を実行する場合 1. javaコマンドでBatch2実行、Batch2クラスでログを出力 2. Batch2からCommon1クラスのメソッドを実行、Common1クラスでログを出力 3. Batch2からCommon3クラスのメソッドを実行、Common3クラスでログを出力 4. 処理終了 ログは「Batch2_20120612.log」に全て出力される。

    • ベストアンサー
    • Java
  • Javaでlog4jを使ってログを出力させてます。

    Javaでlog4jを使ってログを出力させてます。 複数のログを出力したいので、同一propertiesに複数のAppenderを定義しています。 内容は以下の通りです。 log4j.logger.processA=DEBUG, A log4j.appender.A=org.apache.log4j.DailyRollingFileAppender log4j.appender.A.File=a.log log4j.appender.A.DatePattern='.'yyyy-MM-dd-HH-mm log4j.appender.A.Append=true log4j.appender.A.layout=org.apache.log4j.PatternLayout log4j.appender.A.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c - %m%n log4j.logger.processB=DEBUG, B log4j.appender.B=org.apache.log4j.DailyRollingFileAppender log4j.appender.B.File=b.log log4j.appender.B.DatePattern='.'yyyy-MM-dd-HH-mm log4j.appender.B.Append=true log4j.appender.B.layout=org.apache.log4j.PatternLayout log4j.appender.B.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c - %m%n log4j.logger.processC=DEBUG, C log4j.appender.C=org.apache.log4j.DailyRollingFileAppender log4j.appender.C.File=c.log log4j.appender.C.DatePattern='.'yyyy-MM-dd-HH-mm log4j.appender.C.Append=true log4j.appender.C.layout=org.apache.log4j.PatternLayout log4j.appender.C.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss} %-5p %c - %m%n processAやらprocessB、processCは同一サーバ内で非同期で動くプロセスです。 つまり、動作するプロセス毎にログ出力先を変えてます。 各プロセスを動かすと、ちゃんと想定したログファイルに出力されるんですが、 ローテートの時に「log4j:ERROR Failed to rename ~」のエラーが出て、 正常にローテートしません。 なぜだろうと思って、一度全てのログファイルを削除して、 processAだけ動かしてみました。 すると、a.logだけが出力されると思いきや、 b.logとc.logまで0kbではありますが出力されたんです。 つまり、データこそ出力しないけど、 他プロセスで出力するファイルをロックしてたんです。 これって、同一propertiesに書いているのが悪いんでしょうか? それとも、設定が不足している為、そうなってしまってるんでしょうか? ご存知の方、お知恵をお貸し下さい。

    • ベストアンサー
    • Java
  • classファイルとJARファイルで実行した出力が異なる

    Javaのコマンドラインツールです。 CLASSファイルのままで実行 C:\> java -classpath .;mail.jar;activation.jar Mailx すると正常な出力が得られるプログラムをJARファイルにして C:\> jar xvf activation.jar C:\> jar xvf mail.jar C:\> jar cfm Mailx.jar Mailx.mf *.class com javax C:\> jar tvf Mailx.jar 実行 C:\>java -classpath Mailx.jar Mailx すると、正常な出力が得られなくなり、メールアドレスが出力されるはずが、メモリのアドレスのような値が出力  javax.mail.util.SharedByteArrayInputStream@1bf52a5 されるようになります。 なぜなのでしょうか? <Mailx.mf> Manifest-Version: 1.0 Main-Class: Mailx

  • java-prugin1.3、Netscape communicatorでアプレットが呼び出せない。

    私は現在JAVAアプレットを作成しそのクラスファイルをjarにして そのjarファイルの中からクラスファイルをロードするhtmlを書きたいので、 アプレットを貼り付ける個所に以下のようにタグを書いたのですがJAVAコンソール上でクラスが見つかりません。といわれて失敗してしまいます。 (netscapeのみ失敗します。IEは成功してアプレットを実行できます。) 何か他に必ず指定しなければいけない属性があるのでしょうか? javadocも見て確認したのですが。。。 どなたか教えていただけないでしょうか? ちなみにjarファイルもhtmlファイルも全て同階層のディレクトリにおいてあります。 ----------ソースここから-------------- <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,1,3"> <PARAM NAME="code" VALUE="ReportSample.class"> <PARAM NAME="archive" VALUE="Sample.jar"> <PARAM NAME="codebase" VALUE="."> <PARAM NAME="type" VALUE="application/x-java-applet;version=1.3"> <PARAM NAME="mylabel" VALUE="MyLabel"> <COMMENT> <EMBED type="application/x-java-applet;version=1.3" width="200" height="200" align="baseline" java_archive="Sample.jar" java_codeBase="./" java_code="ReportSample.class"  pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html"> <NOEMBED> </COMMENT> Java Plug-inの実行に失敗しました </NOEMBED> </EMBED> </OBJECT> --------------------------------------

    • ベストアンサー
    • HTML
  • 【Java】Eclipseで作成したTomcatプロジェクトへブラウザ

    【Java】Eclipseで作成したTomcatプロジェクトへブラウザからアクセスできません。 Tomcatは問題なく起動していて、Apache Tomcatへはアクセスできます。 以下に詳細を記載していますのでアドバイスをお願いします。 環境は以下の通りです。 ・Windows XP ・Internet Explorer8.0 or Firefox ・Eclipse Platform 3.4.2 Ganymede (All in one) ・Tomcat6.0 ・jre1.6 EclipseでTomcatを起動でき、その際のコンソールにも特にエラーはありません。 Tomcatを起動した際に http://localhost:8080/ へアクセスすると、Apache Tomcatへ繋がります。 なので問題なくTomcatは起動しています。 EclipseでTomcatプロジェクトとして”mbshop”という名のプロジェクトを作成しました。 http://localhost:8080/mbshop/とアクセスするとHTTPステータス 404 - /mbshop/ と表示されてしまいます。 mbshop配下にWEB/INFがあり、その中にweb.xmlを記述しています。 web.xmlの記述内容は以下の通りです。 <?xml version="1.0" encoding="ISO-8859-1"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" <servlet> <servlet-name>invoker</servlet-name> <servlet-class> org.apache.catalina.servlets.InvokerServlet </servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> </web-app> Tomcatが起動できApache Tomcatのサイトへアクセスできるのに、 Eclipse内のTomcatプロジェクトが表示できないのは、なぜでしょうか。 いくら調べても原因が見つかりません。 ご存知の方がいれば、アドバイスを下さい。 宜しくお願いします。

    • ベストアンサー
    • Java
  • 実行可能jarファイルについて!

    実行可能jarファイルについて! java -jar Foo.jar Foo というやり方で、実行可能jarファイルにあるクラスの中から実行するクラスを指定できるという記述があったので、試してみたのですが、うまくいきません。 http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/java_primer/ExecutableJarfile.html どうしても、マニフェストファイルに書かれたクラスが実行されてしまいます。 マニフェストファイルはこちらの内容になります。 Manifest-Version: 1.0 Rsrc-Class-Path: ./ geronimo-jta_1.1_spec-1.0.jar s2-dao-1.0.49.jar co mmons-logging-1.1.jar poi-3.0-FINAL.jar aopalliance-1.0.jar s2-dao-ti ger-1.0.49.jar junit-3.8.2.jar teeda-core-1.0.13-sp7.jar geronimo-ser vlet_2.4_spec-1.0.jar cglib-nodep-2.1_3.jar s2-extension-2.4.40.jar s 2-tiger-2.4.40.jar easymock-2.4.jar teeda-webunit-0.2.2.jar teeda-aja x-1.0.13-sp7.jar teeda-tiger-1.0.13-sp7.jar ojdbc6.jar easymockclasse xtension-2.4.jar commons-lang-2.4.jar javassist-3.4.ga.jar teeda-xmlu nit-0.1.0.jar log4j-1.2.13.jar teeda-extension-1.0.13-sp7.jar ognl-2. 6.9-patch-20090427.jar junit-4.4.jar junit-addons-1.4.jar s2-framewor k-2.4.40.jar h2-1.0.69.jar Class-Path: . Rsrc-Main-Class: jp.co.tsys.sfi.batch.execute.TagOutputExecute Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader jarファイルは、Eclipseの実行可能jarファイルの出力で、エクスポートしました。 よくみると、Main-ClassがEclipseのクラスになっているので、そこが違うのかな、と予想しています。 なぜ、Eclipseのエクスポートを使っているかというと、ライブラリのjarファイル群をjarファイルに取り込むのに便利だと思ったからです。 →これさえできれば、ほかの方法で構いません。 どうかよろしくお願いします!

    • ベストアンサー
    • Java
  • クラスファイルの作成方法

    超初心者 javaアプレット作成の練習中です クラスファイル(Jcam.classとJcamString.class)をHTMLファイルと同じ場所(デレクトリ)に置きました  <applet code="Jcam.class" width=300 height=150> <param name="image" value="s0.jpg"> <param name="title" value="WELCOME"> <param name="fixed" value="Summer|Sunset beach"> <param name="scroll" value="Cool wind|Twilight"> <param name="expand" value="150"> <param name="font" value="Courier|p|16"> <param name="titleFont" value="TimesRoman|bi|48"> </applet> 上記クラスファイルの作成が間違いでわかりません 中学生程度でわかりやすく教えてください。

    • ベストアンサー
    • Java
  • 外部jarへのパスの通し方

    はじめまして。パスの通し方について教えてください。 javaを勉強しようと、 j2sdk1.4.1_04 jakarta-log4j-1.2.8 tomcat_5.0.16 eclipse2.1.1 をダウンロードして、環境を設定しようとしているところです。 しかし、外部jar(log4j、tomcat)を使用したSRCをコンパイルしようとしても、javax.servlet.httpが見つかりません等のエラーが出てしまいます。 eclipseでは、外部jarを取り込んでいるので、コンパイルが通って動作確認(log4jのみ)は済んでいます。 ただし、コマンドプロンプトからのコンパイルでは上記のようなエラーが出てしまいます。 PATHは JAVA_HOME: C:\j2sdk1.4.1_04 TOMCAT_HOME: C:\Program Files\Apache Software Foundation\Tomcat 5.0 LOG4J_HOME: C:\jakarta-log4j-1.2.8 CLASS_PATH .;%LOG4J_HOME%\dist\lib\log4j-1.2.8.jar;%TOMCAT_HOME%\common\lib\ant.jar;%TOMCAT_HOME%\common\lib\commons-collections.jar・・・ (C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib\配下全てのjar) に設定してあります。(インストールは全てデフォルト、解凍するものはC直下に解凍してあります。eclipseも同様のものを外部jarとして取り込んであります。) 何か、根本的に間違っているのでしょうか? よろしくお願いします。 ★最終的には、MY_SQLを使用しservletからDBアクセスという環境を設定したいと思っています。 長文失礼しました。