9

AppEngine はログに JUL を使用し、logging.properties ファイルを構成し、appengine-web.xml でそれを参照しています。

問題は、AppEngine がコンソール ログにデータを表示する形式が、各ログ行で約 180 文字を超えると切り詰められることです。そして、その大部分はメソッドとクラス名 (パッケージを含む) と日付で占められているため、実際に出力されるログ メッセージはあまり多くありません。

プログラムと logging.properties の両方で、自分の Formatter を構成しようとしましたが、うまくいきませんでした。

slf4j、logback、または log4j を介してすべてのログをプッシュできることはわかっていますが、そうすることで、独自のスタイルの冗長性を持つ AppEngine ログ コンソールにそのようなすべてのログが stdout として表示されると思います。

AppEngine ログの特定の形式を定義する方法はありますか? もしそうなら、その方法は? 各ログ行が 180 文字に切り詰められていなければ、これで十分です。

4

3 に答える 3

3

ログのダウンロード機能を試してみましたか: ログが切り捨てられず、すべてを表示でき、ダウンロードするログ エントリの日数と重大度を指定できます。

C:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.7.2.1\appengine-java-sdk-1.7.2.1\bin>appcfg.cmd --severity=DEBUG --num_days=2 request_logs C:\workspace\my_app\war C:\workspace\MY_LOGS.TXT

<path to SDK>/appcfg.cmd --severity=DEBUG --num_days=2 request_logs <path to war> <path to log>

これが、ログの詳細を確認できる唯一の方法です。デフォルトのログ レベルは INFO であるため、有効にするには、severity および num_days 引数を実際に使用する必要があります。

さらに、バックエンドのログをダウンロードする場合は、コマンド ラインで次のオプションを使用してバックエンドのバージョンを指定する必要があります。worker はバックエンドの名前です。

 --version=worker
于 2012-10-16T08:29:25.817 に答える
0

これをもう少し掘り下げた後、カスタム JUL ハンドラーまたはフォーマッターを appengine ランタイムで取得することができませんでした。その代わりに、次のように、独自のカスタム フォーマッタでルート ロガーを初期化する ServletContextListener を作成しました。

<listener>
   <listener-class>MyLoggingListener</listener-class>
</listener>

サンプルの ServletContextListener を次に示します。

public class MyLoggingListener implements ServletContextListener
{
    private static Logger LOG;

    @Override
    public void contextInitialized(ServletContextEvent sce)
    {
        LOG = Logger.getLogger("");
        Handler[] handlers = LOG.getHandlers();
        for (Handler handler : handlers)
        {
            handler.setFormatter(new MyLogFormatter());
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce)
    {}
}

更新: 上記のコードは開発環境では機能しますが、Appengine では無視されるようです。これで製図板に戻ります。

于 2012-10-14T16:38:30.123 に答える
0

App Engine 構成ツール自体のソース コードを調べたところ、LogService API を介して自分自身にアクセスできる同じ LogService を呼び出していることがわかりました。

したがって、あなたの質問への答えは、次のリンクからコード ベースにコードをドロップするのと同じくらい簡単です。それを管理者ユーザーのみに保護し、問題を解決してください。

https://developers.google.com/appengine/docs/java/logservice/overview

于 2012-10-22T13:05:46.103 に答える