ログファイルを見つけることができません。
Windows XP上のEclipse 3.7.1でJava Logging-Java.util.logging
--を使用しています。logging.properties
ファイルの関連行は次のとおりです。
handlers= Java.util.logging.FileHandler, Java.util.logging.ConsoleHandler
.level=INFO
Java.util.logging.FileHandler.pattern = %h/Java%u.log
Java.util.logging.FileHandler.limit = 50000
Java.util.logging.FileHandler.count = 1
Java.util.logging.FileHandler.formatter = Java.util.logging.XMLFormatter
私の知る限り、これらの2行を実行した後:
Logger logger = Logger.getLogger("test");
logger.logp(Level.INFO, "myClass", "myMethod", "Alcatraz");
ログファイルはC:\Documents and Settings\[My Windows ID]\javaX.log
にある必要があります。X
は整数です。
そのディレクトリには、Java.log
からJava0.log
までの5つの異なるJava4.log
ファイルがありますが、ログレコードや今日の日付のレコードさえも含まれていません。いくつかのグーグル検索を行ったところ、 Tracing and Logging が見つかりました。これは、ログが別の場所c:\Documents and Settings\[My Windows ID]\Application Data\Sun\Java\Deployment\log
にあることを意味します。 plugin5581819941091650582.log
という名前のファイルが1つありますが、基本的には空です。
<?xml version="1.0" encoding="windows-1252" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
</log>
その作成日は先週です。 (どのプロセスがそれを作成したのかわかりません。確かに明示的に作成しませんでした。)
では、ログファイルはどこにありますか?私は他に見る場所が思いつかない。
また、logging.properties
への変更がいつ有効になるかを知っていますか?ログレベルまたはFileHandler.pattern
を変更した場合、プログラムが変更を確認する前に何をする必要がありますか?変更をlogging.properties
に保存するだけでは、明らかに十分ではありません。 Eclipseを再起動する必要がありますか?またはコンピューターを再起動しますか?ちょっと興味があるんだけど。それは、ログファイルが実際にどこにあるのかを見つけることと同じくらい私にとって大きな問題ではありません。
あなたのlogging.properties
ファイルが見つかりましたか?クラスパスのルートで利用可能である必要があります。健全性チェックとして、次のコードは何を印刷しますか?
System.out.println(getClass().getClassLoader().getResource("logging.properties"));
コードがstatic
コンテキストにある場合、使用
System.out.println(ClassName.class.getClassLoader().getResource("logging.properties"));
.logファイルは\ workspace.metadataフォルダーにあります。 Eclipse 4.2を使用しています。他の初心者を助けようとする初心者。
質問者が抱えている問題の根本的な原因は、logging.propertiesファイルが読み取られていないことです。Java.util.logging.config.file
で指定されたファイルは、クラスパスから読み取られません。代わりに、現在のディレクトリに関連するファイルシステムから読み取られます。
たとえば、次のコマンドJava -Djava.util.logging.config.file=smclient-logging.properties SMMain
を実行すると、現在のディレクトリからsmclient-logging.properties
が読み取られます。正しいJava.util.logging.config.fileが読み取られると、ファイルで指定されたとおりにログが生成されます。
ログファイルの場所は、logging.propertiesファイルを使用して制御できます。そして、JVMパラメータexとして渡すことができます:Java -Djava.util.logging.config.file=/scratch/user/config/logging.properties
詳細: https://docs.Oracle.com/cd/E23549_01/doc.1111/e14568/handler.htm
ファイルハンドラーの構成
ログをファイルに送信するには、logHandler.propertiesファイルのhandlersプロパティにFileHandlerを追加します。これにより、ファイルロギングがグローバルに有効になります。
handlers= Java.util.logging.FileHandler
次のプロパティを設定してハンドラーを構成します。
Java.util.logging.FileHandler.pattern=<home directory>/logs/oaam.log
Java.util.logging.FileHandler.limit=50000
Java.util.logging.FileHandler.count=1
Java.util.logging.FileHandler.formatter=Java.util.logging.SimpleFormatter
Java.util.logging.FileHandler.patternは、出力ファイルの場所とパターンを指定します。デフォルト設定はホームディレクトリです。
Java.util.logging.FileHandler.limitは、ロガーが1つのファイルに書き込む最大量をバイト単位で指定します。
Java.util.logging.FileHandler.countは、循環する出力ファイルの数を指定します。
Java.util.logging.FileHandler.formatterは、ファイルハンドラクラスがログメッセージのフォーマットに使用するJava.util.loggingフォーマッタクラスを指定します。 SimpleFormatterは、ログレコードの「人間が読める」簡単な要約を書き込みます。
$ JDK_HOME/jre/lib/logging.propertiesの代わりにこの構成ファイルを使用するようにJavaに指示するには:
Java -Djava.util.logging.config.file=/scratch/user/config/logging.properties
Nullの場合、ファイルパスはEclipseホームディレクトリになります。 logging.propertiesファイルはシステムによって呼び出されないため、以下に示すようにプロパティファイルを完全なパスにポイントすると、yorが希望する直接の場所にログファイルが生成されます。 -Djava.util.logging.config.file = D:\ keplereclipse\keplerws\NFCInvoicingProject\WebContent\WEB-INF\logging.properties
デフォルトの場所が変更されたようです。ログファイルを見つけるには、アプリケーションでJava Consoleを開きます。そこで「s」を押します。これにより、次のようなシステムプロパティとデプロイメントプロパティが出力されます。
deployment.user.logdir = C:\Users\username\AppData\LocalLow\Sun\Java\Deployment\log
そこにログファイルがあります。
logger.getHandlers()
をデバッグします:FileHandlerのインスタンスのみを対象に、プライベートフィールドを検索します:filesC:\Windows\
_などのデフォルトパスに保存する必要があります。反映、ヒント1と同じ
_Field[] handlerFiles = handler.getClass().getDeclaredFields();
AccessibleObject.setAccessible(handlerFiles, true);
for (Field field : handlerFiles) {
if (field.getName().equals("files")) {
File[] files = (File[]) field.get(handler);
System.out.println(Arrays.toString(files));
}
}
_
ログマネージャは、JVMの起動時に初期化され、mainメソッドの前に完了します。また、System.setProperty("Java.util.logging.config.file", file)
を呼び出すLogManager.readConfiguration()
を使用して、mainメソッドで再初期化することもできます。