Вход через TraceSource в Xamarin (UWP) - PullRequest
0 голосов
/ 19 марта 2019

Я просто хочу войти в консоль и в файл журнала, используя стандартный TraceSource, в моем приложении Xamarin, которое будет работать на UWP, Mac OS X, iOS и Android. Я занимаюсь разработкой / отладкой на UWP.

TraceSource, TraceListener и TextWriterTraceListener действительно все доступны в стандартной библиотеке .Net, так что, возможно, я неправильно их настраиваю? Большинство мест в Интернете настаивают на настройке прослушивателей трассировки в файле app.config, но это не применимо и невозможно для приложений Xamarin. Итак, вот мой код инициализации регистрации, в основном основанный на примере из документации Microsoft:

        private void SetupLogging()
        {
            Trace.Listeners.Add(new TextWriterTraceListener(Console.Out, "consoleTraceListener"));
            string logFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Application.log");
            if (!File.Exists(logFilePath)) File.Create(logFilePath);

            var logFileTraceListener = new TextWriterTraceListener(logFilePath, "logFileTraceListener");
            Trace.Listeners.Add(logFileTraceListener);

            Trace.Write("Test");
            Trace.TraceInformation("Logging Initialized. Log file location: " + logFilePath);
            Trace.Flush();
        }

Когда я запускаю это в приложении Xamarin UWP, файл создается, но в него ничего не записывается, и я ничего не могу найти в выводе программы (нет ConsoleTraceListener, поэтому я пытаюсь написать TextWriterTraceListener до Console.Out). Может кто-нибудь привести рабочий пример для Xamarin? (Я еще не пробовал приложения для Android или iOS; сначала хочу, чтобы UWP работал на локальном компьютере.)

1 Ответ

1 голос
/ 20 марта 2019

Проблема в том, что вы передали неверный строковый параметр в метод TextWriterTraceListener. Пожалуйста, попробуйте передать параметр Stream. Вы можете использовать следующий код напрямую. кстати, вам лучше использовать LocalApplicationData SpecialFolder, к которому можно было бы успешно получить доступ в uwp.

private void SetupLogging()
{
    Trace.Listeners.Add(new TextWriterTraceListener(Console.Out, "consoleTraceListener"));
    string logFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Application.log");
    if (!File.Exists(logFilePath))
    {
        File.Create(logFilePath);
    }
    var logFileTraceListener = new TextWriterTraceListener(File.Open(logFilePath,FileMode.Open), "logFileTraceListener");
    Trace.Listeners.Add(logFileTraceListener);

    Trace.Write("Test");
    Trace.TraceInformation("Logging Initialized. Log file location: " + logFilePath);
    Trace.Flush();
}
...