特定のクラスのエラーをログに記録するには、次のようにクラス名にアクセスします。これは、クラス名を文字列として返す「良い」方法なので、ログに使用できますか?
private static final String CLASS_NAME = MyClass.class.getName();
logger.error("Error occurred in "+CLASS_NAME);
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandles;
...
private final static Logger LOG =
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
この方法でロガーを初期化する場合:
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 )。
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
私はそれをこのようにします:
logger.error("Error occured in " + this.getClass().getName());
何かが変更された場合に管理する方が簡単ですが、これを行う別の方法があります。
使用しているロギングライブラリを指定しなかったため、 slf4jを使用することをお勧めします。一番簡単に手に入ると思います。LoggerFactory
次のように、slf4jからLoggerオブジェクトを要求するだけです。
private static final Logger LOGGER = LoggerFactory.getLogger(YouerClass.class);
これで、ロギングにLOGGERオブジェクトを使用できます。
たとえば、エラーのログは次のようになります。
LOGGER.error(yourMessage, throwable);
単純な文字列メッセージまたは例外全体を送信できます。
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を使用できます。
このリンクで、ハンドラーの例を見つけることができます。