12

特定のクラスのエラーをログに記録するには、次のようにクラス名にアクセスします。これは、クラス名を文字列として返す「良い」方法なので、ログに使用できますか?

private static final String CLASS_NAME = MyClass.class.getName();
logger.error("Error occurred in "+CLASS_NAME);
4

6 に答える 6

19

Java8ソリューション

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandles;
...

private final static Logger LOG = 
                     LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
于 2015-09-06T12:36:10.073 に答える
7

この方法でロガーを初期化する場合:

private static Logger logger = Logger.getLogger(MyClass.class.getName())>

その場合、クラスの名前はすべてのログイベントに表示されます。すべてのログ呼び出しに明示的に指定する必要はありません。

logger.error("Error occured while doing this and that");

すべてのログメッセージにクラス名を含めるように、ログサービスを構成できます(の場合はlogging.propertiesjava.util.logging、 Apache log4jを使用する場合はlog4j.properties )。

于 2012-06-20T08:19:18.587 に答える
4

log4j.xml自体でログパラメータを設定できます。

expの場合-

<appender name="swcd-web" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="DEBUG"/>
    <param name="Append" value="true"/>
    <param name="File" value="${catalina.home}/logs/swcd-web.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
    </layout>
</appender>

このような例外をswcd-web.logファイルに記録します-

2012-05-23 16:34:51,632 [main] ERROR com.idc.sage.sso.dynamo.SsoDbStorage - cannot get configuration for max SSO age
于 2012-06-20T08:14:29.823 に答える
2

私はそれをこのようにします:

logger.error("Error occured in " + this.getClass().getName());

何かが変更された場合に管理する方が簡単ですが、これを行う別の方法があります。

于 2012-06-20T08:17:26.903 に答える
1

使用しているロギングライブラリを指定しなかったため、 slf4jを使用することをお勧めします。一番簡単に手に入ると思います。LoggerFactory次のように、slf4jからLoggerオブジェクトを要求するだけです。

private static final Logger LOGGER = LoggerFactory.getLogger(YouerClass.class);

これで、ロギングにLOGGERオブジェクトを使用できます。

たとえば、エラーのログは次のようになります。

LOGGER.error(yourMessage, throwable);

単純な文字列メッセージまたは例外全体を送信できます。

于 2012-06-20T08:20:42.783 に答える
1

log4j、slf4j、jboss.loggerなどの外部ライブラリを使用している人がたくさんいます...

シンプルな方法を使用して、古い方法を好みます

java.util.logging.Logger

これは標準であり、インポートするのにライブラリは必要ありません。

次のように初期化できます。

private static final Logger LOG = Logger.getLogger(A.class.getName());

そして、ロガーがストリームに書き込むたびに、Aクラスを使用したことがわかります。

String errorcode = "ABC123";
LOG.log(Level.SEVERE,"This is a very important error with code {0}", new Object[]{errorcode});

コンソールやログファイルなど、標準ストリームが何であれ、次のように記述されます。

[date]     [hour]        [level] [class]       [description]
2020-01-01 00:00:10.123  SEVERE  my.package.A  This is a very important error with code AAA123

ログのカスタマイズが必要な場合は、java.util.logging.Handlerを使用できます。

このリンクで、ハンドラーの例を見つけることができます。

于 2020-04-28T21:06:54.390 に答える