web-dev-qa-db-ja.com

Xamarinでのクロスプラットフォームロギング

Xamarin.Andriod、Xamarin.IOS、およびXamarin.PCLプロジェクトにログインできるNLog、Log4Netなどのログユーティリティを探しています。これまで見てきたすべてのロガーは、さまざまな理由でPCLプロジェクトでサポートされていません(ほとんどがファイルIOに関連しています)。 PCLプロジェクトを含むクロスプラットフォーム方式でのロギングをサポートするために利用できるソリューションはありますか?ない場合、PCL(デザインパターンなど)へのロギングをどのように実装しましたか?

ありがとう

23
user3430360

PCLロガーがない場合は、依存性注入を使用することをお勧めします。以下は、2つのサンプル実装(Android LogとSQLiteデータベース)を使用した概念です(ただし、機能します)。

AndroidのLogクラスに近い抽象インターフェース: https://github.com/sami1971/SimplyMobile/blob/master/Core/SimplyMobile.Core/Logging/ILogService.cs

Android固有の実装、Logクラスのラッパー: https://github.com/sami1971/SimplyMobile/blob/master/Android/SimplyMobile.Android/Logging/LogService.cs

CRUDプロバイダーに依存するデータベースロギングのPCL実装: https://github.com/sami1971/SimplyMobile/blob/master/Core/SimplyMobile.Core/Data/DatabaseLog.cs

SQLite.Net.Async PCL互換ライブラリのCRUDプロバイダーラッパー(iOSで利用可能、Android&WP8): https://github.com/sami1971/SimplyMobile/blob/master /Core/Plugins/Data/SimplyMobile.Data.SQLiteAsync/SQLiteAsync.cs

ServiceStack.OrmLiteのCRUDプロバイダーラッパー(iOSおよびAndroidで利用可能): https://github.com/sami1971/SimplyMobile/blob/master/Core/Plugins/SimplyMobile.Data.OrmLite/OrmLite.cs ==

アプリケーションレベルでは、IoCコンテナを使用して、使用するサービスを登録します。例はWP8の場合ですが、iOSおよびAndroidに使用するには、ISQLitePlatformを変更するだけで済みます。

  DependencyResolver.Current.RegisterService<ISQLitePlatform, SQLitePlatformWP8>()
       .RegisterService<IJsonSerializer, SimplyMobile.Text.ServiceStack.JsonSerializer>()
       .RegisterService<IBlobSerializer>(t => t.GetService<IJsonSerializer>().AsBlobSerializer())
       .RegisterService<ILogService>(t =>
                new DatabaseLog(
                    new SQLiteAsync(
                        t.GetService<ISQLitePlatform>(), 
                        new SQLiteConnectionString(
                            Path.Combine(ApplicationData.Current.LocalFolder.Path, "device.log"),
                            true,
                            t.GetService<IBlobSerializer>())
                    )));

Android Log-wrapperは、依存関係がないため、もちろんはるかに簡単です。

DependencyResolver.Current.RegisterService<ILogService, LogService>();
5
SKall

クロスプラットフォームソリューションはまったくありません。サービスを利用して解決できます。したがって、インタフェースILoggingを作成し、ロギングに必要なすべてのメソッドを記述します。次に、各プラットフォームにILoggingを実装するLoggingを実装します。その後、セットアップの各プラットフォームで登録します

     Mvx.RegisterSingleton<ILogging >(new Logging());

その後、コアプロジェクトから簡単にアクセスできます

    Mvx.Resolve<ILogging>();
4
choper