AndroidログをLogglyに送信しようとしています。そのために、ログバックロギングを使用しています。機能をテストするための簡単なプロジェクトを作成しました。厳密モードに違反するか、非同期タスクを作成してログを送信する必要があることを知りました。そうしないと、NetworkOnMainThreadException が発生します。だから私は今のところ StrictMode を試しました。しかし、それを使用した後、「java.net.SocketException: Socket is closed」という例外が発生します。
私はたくさん検索し、いくつかのことを試しましたが、これまでのところ成功していません. この問題を解決する方法がわかりません。slf4jを使用するログバックロギングを介してAndroidログをログに送信できるように、この問題を解決する方法を知っている人はいますか? android-studio と gradle build を使用します。
参照用にコード スニペットと生成されたエラー ログを添付します。ありがとう!
MainActivity クラス:
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MainActivity extends AppCompatActivity {
final static Logger logger = LoggerFactory.getLogger(MainActivity.class);
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.permitAll()
.build());
logger.info("This is a dummy info message");
logger.info("This is another dummy info message for testing");
logger.debug("This is a dummy debug message.");
}
}
logback.xml:
<configuration debug='true'>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Create a file appender for a log in the application's data directory -->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>/data/data/com.android.myapplication/files/log/logbackLogs.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="LOGGLY" class="ch.qos.logback.ext.loggly.LogglyAppender">
<endpointUrl>https://logs-01.loggly.com/inputs/TOKEN/tag/logbacklogglytest</endpointUrl>
<pattern>%d{"ISO8601", UTC} %p %t %c{0}.%M - %m%n</pattern>
</appender>
<!-- Write INFO (and higher-level) messages to the log file -->
<root level="DEBUG">
<appender-ref ref="file" />
<appender-ref ref="STDOUT" />
<appender-ref ref="LOGGLY" />
</root>
</configuration>
AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Gradle ビルド ファイル:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.android.myapplication"
minSdkVersion 18
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile project(':logback-android-1.1.1-4')
compile project(':slf4j-api-1.7.6')
compile project(':logback-ext-loggly-0.1.4')
}