実行しているインスタンスに関する情報を取得することは可能ですか?ロギングの目的で、コードが現在実行されているインスタンスの単純な識別子だけを出力したいと思います。
4 に答える
言語タグがなく、プロフィール履歴を見ると、GAE / Jを使用していると思いますか?
その場合、インスタンスID情報は、ApiProxy.getCurrentEnvironment()
メソッドを介して取得できる環境属性の1つに埋め込まれます。次に、キーを使用して、結果のマップからインスタンスIDを抽出できますBackendService.INSTANCE_ID_ENV_ATTRIBUTE
。
キーはBackendServiceに保存されていますが、このアプローチはフロントエンドインスタンスでも機能します。したがって、要約すると、次のコードはインスタンスIDを取得します。
String tInstanceId = ApiProxy.getCurrentEnvironment()
.getAttributes()
.get( BackendService.INSTANCE_ID_ENV_ATTRIBUTE )
.toString();
このアプローチはGoogleによってまったく文書化されておらず、将来警告なしに変更される可能性があることに注意してください。しかし、あなたのユースケースはロギング専用なので、今のところはそれで十分だと思います。
さらに良いことに、ローカルでも正しく機能するように、呼び出しを try catch でラップする必要があります。
これをインポート
import com.google.appengine.api.modules.ModulesException;
import com.google.appengine.api.modules.ModulesServiceFactory;
次に、メソッドはこれを実行できます
String instanceId = "unknown";
try{
instanceId = ModulesServiceFactory.getModulesService().getCurrentInstanceId();
} catch (ModulesException e){
instanceId = e.getMessage();
}
try catch がないと、ローカルで実行するときに厄介なエラーが発生します。
これは、エンドポイントを pub-sub やその他のビットと混合して使用して、一部の動作が異なる理由を特定し、それが新しいインスタンスに関連しているかどうかを判断する際のデバッグに非常に役立つことがわかりました。