序文
禿げた頭だけが強くなることができます。
テキストは私のGitHubリポジトリに含まれています。Starへようこそ:https://github.com/ZhongFuCheng3y/3y
「アリババJava開発マニュアル」を読む前に記事を書いたのを覚えていますが、これまでの自習では「ログ」との接触が少なかったので、「マニュアル」に「ログプロトコル」を置いておきました。
そして、私は以前に記事を書きました:私が会社で行ったプロジェクトと私が学校で行ったプロジェクトの違いは何ですか?記事で言及されています:会社のプロジェクトにはe.printStackTrace()がありません;この種のコードは存在します。印刷されたエラーメッセージには日付やグレードなどがないため、分析に不便です。
仕事中のサーバーのログをチェックするのは非常に一般的な操作なので、最初に仕事で一般的に使用されるLinuxコマンドを作成し、ログをチェックするときに一般的に使用されるLinuxコマンドについて説明しました。
しばらくログに触れていたので、「マニュアル」を振り返って、気になる点がないかと思ったので、このメモを持っています。
1つは、Javaロギングの基礎です
以前に自分自身を教えたとき、問題をトラブルシューティングするために次のコードを書くだけでした。
try {
// doSomething
} catch (Exception e) {
e.printStackTrace();
}
----------
// 查看某个数据的值时:
System.out.println(xxxx);
会社に行ったとき、上記のコードがすべて欠落していることに気付きました。残りは次のとおりです。
LOGGER.info("begin to run Java3y:{}", id);
----
LOGGER.error("excepiton occurs when run Java3y {}, exception{}", id, e.toString());
e.printStackTrace();を使用する場合、コントロールに出力された情報を分析するのは便利ではありません。
コントロールに出力された情報
を分析するのは不便であり、サーバーのディスクに等級付けされた情報を記録します。問題がある場合は、対応する情報に従って関連するログを見つけることができます(これはトラブルシューティングに非常に便利です)。
サーバー上のログ情報
を見て、一般的なログがどのように見えるかを見てみましょう。
ログの長さはどれくらいですか?
例:送信時間とユーザーIDを指定すると、ユーザーがSMSを受信できないようだと誰かが報告した場合、ログでシステム内のユーザーの送信ステータスを確認できます(たとえば、写真)。上:状態:81、成功した状態だと思います)
では、ここに質問があります。どこにログを記録しますか?答えは実際には「マニュアル」に記載されています。
注意深くログに記録します。実稼働環境では、出力デバッグログを無効にし、情報ログを選択的に出力します。
回線情報だけでビジネス動作を記録するために警告を使用する場合は、ログ出力の問題に注意を払い、サーバーディスクの
爆発を回避し、これらの観測値を削除することを忘れないでください。ログ。
多数の無効なログを出力しても、システムパフォーマンスが向上し、エラーポイントをすばやく特定することはできません。ログを記録するときは、次のことを
考慮してください。これらのログは本当に表示されていますか?このログを見ると何ができますか?トラブルシューティングにメリットはありますか?
1RBIとは何ですか?
ログに記録する最も一般的な方法は、プログラムの実行中に関連情報を印刷することです。これは、問題をすばやく見つけてトラブルシューティングするために使用されます。最初はこのように理解していましたが、実際には拡張することができます。
私が取り組んでいるシステムでは、ログを使用してシステムの実行リンクも管理しています。たとえば、今すぐ通知メッセージをプッシュしたいのですが、通知メッセージは実際には次のとおりです。
通知メッセージ
プロセスは次のようになります。
- 最初に、誰かが私のRPCによって提供されたインターフェイスを呼び出し(または私が自分のインターフェイスを呼び出した)、これが通知メッセージであることがわかりました。そこで、対応するタスクを組み立てて、メッセージキューに非同期に配置しました
- 別のシステムは、メッセージキューからタスクを取得し、タスクを処理して(たとえば、夜間にブロックされているかどうか、送信を強制されているかどうかなど)、HTTPインターフェイスを呼び出してタスクをダウンストリームに渡します。
- そこ下流物事の多くは、(例えば、SDKライブラリはAndroidとiOSは異なる処理を行う、と呼ばれる必要がある)全体のリンクが非常に長い、実際には
全体のリンクは、
露出(と私たちはプッシュが完了した後、我々はいくつかの指標を数えることができることを願っていますボリューム、クリック率、コンバージョン率など)。それ以来、いくつかの重要な位置にログを書き込む必要があります(専門的なポイントは管理と呼ばれます)
リンク全体を開いたら、これらのポイント(ログ)を収集し、リアルタイムストリーミングプラットフォーム(ストーム/フリンク)に配置して、クリーニング/フィルタリングを行います。リアルタイムで使用する必要がある場合は、Redisに入れて、オフラインでHiveに入れてください。
2.手動仕様
2.1ファサードモードを使用したログフレームワーク
【必須】ロギングシステム(Log4j、Logback)のAPIを直接アプリケーションで使用することはできませんが、ロギングフレームワーク
SLF4JのAPIを使用し、ファサードモードのログフレームワークを使用することで、さまざまなタイプのメンテナンスや統一ログ処理方法を実現します。
ファサードモード私も以前にメモを書きました:3分でファサードモードを学びましょう!
実際、率直に言って、特定のログフレームワークを切り替えるときに大幅な変更を必要としないように、APIのレイヤーを抽象化したいと思います。
これは、JDBCを学ぶときに理解できます。
MySQL、Oracle、SQL Serverのいずれに接続しても、インターフェイスは常に同じです。データベースを切り替えるときにJavaAPIを変更する必要はありません。
会社のプロジェクトを見て、SLF4J + Logbackを採用しました
2.2Throwableクラスインターセプトを使用したRPCインターフェイスの呼び出し
[必須] RPC、セカンドパーティパッケージ、または動的に生成されたクラスの関連メソッドを呼び出す場合、例外
をインターセプトするためにThrowableクラスを使用する必要があります。
以前に問題を調査していたときに、解決できない問題がありました。DeBug中にcatchモジュールに入力しませんでした。後で、私の先輩は言った:「なぜあなたはThrowableに変えようとしませんか?
try {
} catch (Throwable e) {
}
私は非常に疑わしく、「なぜThrowableに変更するのですか?Exceptionを使用してすべての例外をキャッチできますか?ExceptionはThrowableのサブクラスですが、ExceptionにはすでにすべてのJava例外が含まれています。」
ご存知のとおり、Throwableには2つのサブクラスがあります。
- エラー(通常はこれを無視します...通常の状況では、エラープログラムは実行されません)
- 例外
The Throwable class is the superclass of all errors and exceptions in the Java language
上記のルールは「マニュアル」でも説明されています。
説明:メソッドはリフレクションメカニズムを介して呼び出されます。メソッドが見つからない場合、NoSuchMethodExceptionがスローされます。どのような状況で
NoSuchMethodErrorがスローされますか?セカンドパーティパッケージタイプの競合が発生した場合、アービトレーションメカニズムにより、メソッドシグネチャの意図しないクラスバージョンが導入されない
か、バイトコード変更フレームワークが発生する可能性があります。クラス(ASMなど)を動的に作成または変更すると、対応するメソッドが変更されます。署名。
コードのコンパイル時間を正しくするこれらのケースは正しいですが、コードが実行されると、NoSuchMethodErrorがスローされます。
大まかな意味は次のとおりです。RPC、セカンドパーティパッケージ、または動的に生成されたクラスの関連メソッドを呼び出すと、エラーが直接スローされ、catchExceptionをキャッチできません。
例を見たい学生はこの記事を読むことができます:
この記事は少し短いようです...
参考資料(アリババ開発マニュアルのダウンロードアドレス):
-
https://github.com/alibaba/p3c
情報を検索するときに見つかった良い記事: - https://www.cnblogs.com/crazyacking/p/5456347.html
推奨読書:
- 愚かな操作を覚えておいてください-スレッドの安全性の問題
- 最近学んだフロントエンド分離の知識
- 仕事で一般的に使用されるSQL
- Githubで利用できるJavaインタビュー/学習関連のウェアハウスの推奨事項はどれですか?
- 仕事で一般的に使用されるLinuxコマンド
- 会社で行われたプロジェクトと学校で行われたプロジェクトの違いは何ですか?
- ディレクトリ| Java3yの最も完全なディレクトリ
200以上のオリジナルの技術記事、
膨大なビデオリソース、
絶妙なブレインマップ
、インタビューの質問、
長押ししてコードをスキャンし、フォローして取得します