Ведение журнала через TraceSource в Xamarin (UWP)

Я просто хочу войти в консоль и в файл журнала, используя стандартный 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 на локальном компьютере.)


person voxoid    schedule 19.03.2019    source источник
comment
Работает ли следующий ответ?   -  person Nico Zhu - MSFT    schedule 21.03.2019


Ответы (1)


Проблема в том, что вы передали неверный строковый параметр в _ 1_. Пожалуйста, попробуйте передать параметр 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();
}
person Nico Zhu - MSFT    schedule 20.03.2019
comment
В моем приложении для Android я хотел бы прослушивать события TracseSource, генерируемые сторонним пакетом, я подробно изложил свой вопрос в ссылке stackoverflow.com/questions/60970153/ вы можете проверить и помочь мне, как записывать события TraceSource в файл журнала - person vignesh kumar; 02.04.2020
comment
Боюсь, я не смог ответить на вопрос о библиотеке третьей части, и, чтобы другие сообщества рассмотрели ваш вопрос, добавьте тег xamarin-anroid. - person Nico Zhu - MSFT; 02.04.2020