ローカルリモート
Logcatを尊重する
主なAndroid開発ツール- Logcat.それは非常に広く使用され、常に手で、それはあなたがそれなしで動作しなければならない状況を想像することは困難です.しかし、私はそのような状況で私自身を見つけました.そして、私はこのドラマを生き残るのを助けたツールを書き、共有することに決めました.
挑戦
私はあるライブラリをテストするためのタスクを与えられた#fintech
, いくつかの追加セキュリティチェックがあります.このライブラリは、
私はあるライブラリをテストするためのタスクを与えられた
#fintech
, いくつかの追加セキュリティチェックがあります.このライブラリは、debug
モードadb install
release
バージョン)release
バージョンはログを制限しますが、少なくとも例外はログに記録されます.アプリケーションはかなり頻繁にクラッシュしていた、私はいくつかの標準的なNPEを疑ったので、例えば、私は何かを初期化またはスタブなどを忘れたが、私はどこに考えていた.私はテストやスタブライブラリを書くことができませんでした、それは私のタックだったので-それはどのように“リアル”環境に最も近い方法をチェックします.crashlyticsまたはいくつかの他のリモートクラッシュ報告ツールは多少役立つかもしれません.しかし、報告されていないだけで、アプリケーションのクラッシュといくつかのメトリックが報告され、私は定期的なイベントをログしたいと思います.
解決策
あなたがLogcatログを送ることができるならば、例えばWebSocketを通して、そして、それからあなたのコンピュータで彼らを捕えてください.私はそのようなツールを見つけませんでした.
サーバ
私は何か簡単なものを必要とし、それは私がWebSocketサーバーを設定し、ログをHTMLとして表示するか、ファイルにログインできるようにしました.選んだExpressJS 私は趣味として少し対処しなければならなかった.
Websocket
これは、WebSocketサーバーを取得するのにかかるすべてです.
const ws = require('ws');
const wsServer = new ws.Server({ noServer: true});
wsServer.on('connection', socket => {
events.clear();
console.log("clearing events");
socket.on('message', message =>{
events.add(JSON.parse(message))
})
});
const server = app.listen(process.env.WS_PORT || '1234')
console.log("Remote Logger is starting on port: ", process.env.WS_PORT || '1234');
server.on('upgrade', (request, socket, head) =>{
wsServer.handleUpgrade(request, socket, head, socket =>{
wsServer.emit('connection', socket, request);
});
});
サーバーは、起動パラメータのWS_PORT
またはデフォルト1234
, そして、events
オブジェクト.
Web UI
JavaScriptオブジェクトのログを持つことで、HTMLとして表示できます.使用するpug テンプレート.ログの表示にかかるすべてのExpressJSアプリでこれを追加されます.
app.set('view engine', 'pug')
app.get('/', function (req, res) {
res.render('index', { title: 'Remote Logger', message: 'Remote Logger!', data: events.toArray() })
})
パグテンプレート
html
head
title= title
style
include style.css
body
h1= message
ul
each event in data
li(class=event.level)!= event.time+' <b>['+event.level+'] '+event.tag+'</b> : ' + '<span style="white-space: pre-wrap">'+event.message+'</span>'
単純な順序のリストとしての要素を持つevents
オブジェクトは、ログレベルの色に対して非常に基本的なCSSスタイルです.
以下のようになります.
エキストラ
私はちょうど楽しみのために余分な何かを追加しないようにすることができなかったので、サーバーを起動した後、我々は使用されるポートについての情報、Androidのコードで入力されるサーバーのIP、およびツールの名前によって迎えられます.また、ログページが自動的にブラウザで開きます.
❯ node index.js
Remote Logger is starting on port: 1234
Application started on port 3000 at IP: 192.168.1.87
██████╗ ███████╗███╗ ███╗ ██████╗ ████████╗███████╗
██╔══██╗██╔════╝████╗ ████║██╔═══██╗╚══██╔══╝██╔════╝
██████╔╝█████╗ ██╔████╔██║██║ ██║ ██║ █████╗
██╔══██╗██╔══╝ ██║╚██╔╝██║██║ ██║ ██║ ██╔══╝
██║ ██║███████╗██║ ╚═╝ ██║╚██████╔╝ ██║ ███████╗
╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝
██╗ ██████╗ ██████╗ ██████╗ ███████╗██████╗
██║ ██╔═══██╗██╔════╝ ██╔════╝ ██╔════╝██╔══██╗
██║ ██║ ██║██║ ███╗██║ ███╗█████╗ ██████╔╝
██║ ██║ ██║██║ ██║██║ ██║██╔══╝ ██╔══██╗
███████╗╚██████╔╝╚██████╔╝╚██████╔╝███████╗██║ ██║
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝
アンドロイド
ツールのAndroid部分の初期化は些細なことだが、それはonCreate()
継承するクラスのメソッドです.Application
:
class App : Application() {
override fun onCreate() {
super.onCreate()
RemoteLogger().initialize(
Config(
"192.168.1.87",
1234,
applicationContext.packageName
)
)
}
}
あなただけのライブラリを初期化し、物事を忘れて、ログをローカルサーバーに移動します.このツールは、リモートアプリケーションのクラッシュやLogcat自体を収集に置き換えることはありません.これは、特定の問題を解決するだけで、アプリケーションがLogcatの使用を許可しない環境で実行する必要がありますが、まだ開発段階では、ログへのアクセスが必要な場合.ロガー初期化とライブラリ自体は、アプリケーションの公開されているバージョンに含まれてはいけません.
用途
const ws = require('ws');
const wsServer = new ws.Server({ noServer: true});
wsServer.on('connection', socket => {
events.clear();
console.log("clearing events");
socket.on('message', message =>{
events.add(JSON.parse(message))
})
});
const server = app.listen(process.env.WS_PORT || '1234')
console.log("Remote Logger is starting on port: ", process.env.WS_PORT || '1234');
server.on('upgrade', (request, socket, head) =>{
wsServer.handleUpgrade(request, socket, head, socket =>{
wsServer.emit('connection', socket, request);
});
});
app.set('view engine', 'pug')
app.get('/', function (req, res) {
res.render('index', { title: 'Remote Logger', message: 'Remote Logger!', data: events.toArray() })
})
html
head
title= title
style
include style.css
body
h1= message
ul
each event in data
li(class=event.level)!= event.time+' <b>['+event.level+'] '+event.tag+'</b> : ' + '<span style="white-space: pre-wrap">'+event.message+'</span>'
❯ node index.js
Remote Logger is starting on port: 1234
Application started on port 3000 at IP: 192.168.1.87
██████╗ ███████╗███╗ ███╗ ██████╗ ████████╗███████╗
██╔══██╗██╔════╝████╗ ████║██╔═══██╗╚══██╔══╝██╔════╝
██████╔╝█████╗ ██╔████╔██║██║ ██║ ██║ █████╗
██╔══██╗██╔══╝ ██║╚██╔╝██║██║ ██║ ██║ ██╔══╝
██║ ██║███████╗██║ ╚═╝ ██║╚██████╔╝ ██║ ███████╗
╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝
██╗ ██████╗ ██████╗ ██████╗ ███████╗██████╗
██║ ██╔═══██╗██╔════╝ ██╔════╝ ██╔════╝██╔══██╗
██║ ██║ ██║██║ ███╗██║ ███╗█████╗ ██████╔╝
██║ ██║ ██║██║ ██║██║ ██║██╔══╝ ██╔══██╗
███████╗╚██████╔╝╚██████╔╝╚██████╔╝███████╗██║ ██║
╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝
class App : Application() {
override fun onCreate() {
super.onCreate()
RemoteLogger().initialize(
Config(
"192.168.1.87",
1234,
applicationContext.packageName
)
)
}
}
node index.js
Androidからのすべてのログは、アプリケーションが起動する瞬間から収集されている
onCreate ()
インApp
. 通常、最初のエントリはFri Aug 06 08:58:54 GMT + 02: 00 2021 [DEBUG] LOGGER: --------- beginning of system
. ログは、1つのスレッドで収集され、WSサーバーに接続した後、別の1つで送信されます.ログはアプリケーションパッケージだけで収集されるので、initialize()
メソッド.RemoteLogger設定によってキャッチされない例外の処理を引き継ぐ
Thread.setDefaultUncaughtExceptionHandler
. アプリケーションをクラッシュさせる例外が発生した場合、サーバー上でログオンされ、アプリケーションがエラーコードでクラッシュします1
. 私はFirebase Crashlyticsでそれをテストする機会を持っていませんでした、しかし、あなたがすでにそれを構成したならば、あなたは多分私のツールを必要としないでしょう.あなたはとにかくそれを使用したくない
私はこのツールはかなりラフだと思います.しかし、それは私を大いに助けました、そして、私はそれの上で1つ以上の午後を過ごしたくありませんでした.私はそれを使用する必要はありません.
Reference
この問題について(ローカルリモート), 我々は、より多くの情報をここで見つけました https://dev.to/asvid/android-local-remote-logger-1kikテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol