Amplify Loggerの使い方について

AWS Amplifyの utilitiesに loggerがある。

https://docs.amplify.aws/lib/utilities/logger/q/platform/js/

使い方

import { Logger } from 'aws-amplify';

const logger = new Logger("my-logger");
logger.warn("warning message");

デバッグコンソールにはこのように出力される。

[WARN] 56:32.69 my-logger - warning message

注意点としては、インスタンスに指定されているレベル以上のログしか出力されないということ。 ログレベルは上から順に以下のようになっている。

  • ERROR
  • WARN
  • INFO
  • DEBUG
  • VERBOSE

デフォルトのログレベルはWARN。 例えば、以下のようなloggerがある場合、WARNERRORのログでないと出力されないので logger.info を実行してもログは出力れない。

import { Logger } from 'aws-amplify';

const logger = new Logger("my-logger");
logger.info("this is info message");  // これはconsoleに出力されない

INFOレベルのログを出したい場合は以下のようにインスタンス生成時にログレベルを指定しておく必要がある。

import { Logger } from 'aws-amplify';

const logger = new Logger("my-logger", "INFO");
logger.info("this is info message");  // これならconsoleに出力される

グローバルログレベルによる出力制御

また、グローバルログレベルを指定することで、インスタンスのログレベルを上書きすることができる。

import { Logger } from 'aws-amplify';

const logger = new Logger("my-logger");
logger.info("this is info message");  // これはconsoleに出力されない

window.LOG_LEVEL = "INFO"; // グローバルログレベルを指定

logger.info("this is info message again!");  // これはconsoleに出力される

実践的な使い方としては、インスタンス作成時はデフォルトのログレベルにしておいて、環境ごとにグローバルログレベルを指定して出し方を変えるというやり方のほうが良さそう。

const logger = new Logger("my-logger");

if (env === "development") {
  window.LOG_LEVEL = 'DEBUG';
else if (env === "staging")
  window.LOG_LEVEL = "INFO";
}

logger.debug("develop の環境のみで出力されるメッセージ")
logger.info("stagingとdevelop の環境で出力されるメッセージ")
logger.warn("production, staging, develop の環境で出力されるメッセージ")

こうしてやれば開発環境ではデバッグログを出したいが、本番ではWARN以上のログしか出したくない、という場合にもコードをいじらずにログを出せるので便利。

余談

もともとはこちらがやりたかったのだけど。 CloudWatchProvider をセットすることで amplify loggerを通してCloudWatchにログを流せるみたい。

https://github.com/aws-amplify/amplify-js/pull/8309