Xamarin Forms используют Gelf 4Net для отправки логов в graylog - PullRequest
0 голосов
/ 28 апреля 2020

Я создал консольное приложение (.NetCore), добавил библиотеку gelf 4Net, внедрил решение, загрузил конфигурацию и заставил его работать для отправки журналов в graylog. Журналы присутствуют на консоли, в файле и на сервере.

Теперь мне нужно сделать то же самое в приложении Xamarin Forms (сейчас только для android). Я добавил библиотеку классов, установил библиотеку gelf 4net. Я добавил config. xml в проект Xamarin Forms в качестве встроенного ресурса. Я получаю содержимое конфигурации и сохраняю его во внешнем хранилище как файл xml.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
    </configSections>
    <log4net>
        <appender name="GelfHttpAppender" type="Gelf4Net.Appender.GelfHttpAppender, Gelf4Net">
            <url value="http://yourserver.com/gelf" />
            <threshold value ="INFO" />
            <layout type="Gelf4Net.Layout.GelfLayout, Gelf4Net">
                <param name="AdditionalFields" value="app:HttpAppender,Environment:LocalDevelop,Level:%level,HostName:tp" />
                <param name="Facility" value="TP" />
                <param name="IncludeLocationInformation" value="false" />
                <param name="SendTimeStampAsString" value="false"/>
            </layout>
        </appender>
        <appender name="ConsoleAppender" type="LoggerNetCoreEngine.CustomAppenders.ConsoleAppender_JSON, KC_LoggerNetCoreEngine">
            <threshold value ="ERROR" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
            </layout>
        </appender>
        <root>
            <appender-ref ref="GelfHttpAppender" />
            <appender-ref ref="ConsoleAppender" />
        </root>
    </log4net>
</configuration>

Затем я получаю информацию о файле и загружаю конфигурацию:

var logRepository = LogManager.GetRepository(assembly);
var fileInfo = new FileInfo(configPath);
XmlConfigurator.ConfigureAndWatch(logRepository, fileInfo);

Конфигурация успешно загружается и Любые изменения, которые я внес в конфигурационный файл, влияют на поведение приложения.

Из консоли отладки:

04-28 17:52:48.831 D/Mono    ( 4627): Loading reference 2 of /storage/emulated/0/Android/data/se.company.nameApp/files/.__override__/Gelf4Net.dll asmctx DEFAULT, looking for Gelf4Net.HttpAppender, Version=1.0.0.18, Culture=neutral, PublicKeyToken=b04c12492d51401e22
04-28 17:52:48.831 D/Mono    ( 4627): Assembly Ref addref Gelf4Net[0xebbccfe0] -> Gelf4Net.HttpAppender[0xebbcd0a0]: 2
04-28 17:52:48.831 D/Mono    ( 4627): Requesting loading reference 2 (of 8) of /storage/emulated/0/Android/data/se.company.nameApp/files/.__override__/Gelf4Net.HttpAppender.dll
04-28 17:52:48.831 D/Mono    ( 4627): Loading reference 2 of /storage/emulated/0/Android/data/se.company.nameApp/files/.__override__/Gelf4Net.HttpAppender.dll asmctx DEFAULT, looking for log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1af1a2a
04-28 17:52:48.831 D/Mono    ( 4627): Assembly Ref addref Gelf4Net.HttpAppender[0xebbcd0a0] -> log4net[0xebbcd340]: 3
04-28 17:52:48.832 D/Mono    ( 4627): Requesting loading reference 3 (of 8) of /storage/emulated/0/Android/data/se.company.nameApp/files/.__override__/Gelf4Net.HttpAppender.dll
04-28 17:52:48.832 D/Mono    ( 4627): Loading reference 3 of /storage/emulated/0/Android/data/se.company.nameApp/files/.__override__/Gelf4Net.HttpAppender.dll asmctx DEFAULT, looking for System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7fwf11d50a3a
04-28 17:52:48.831 D/Mono    ( 4627): Loading reference 2 of /storage/emulated/0/Android/data/se.company.nameApp/files/.__override__/Gelf4Net.HttpAppender.dll asmctx DEFAULT, looking for log4net, Version=2.0.8.0, Culture=neutral04-28 17:52:48.832 W/Mono    ( 4627): The request to load the assembly System.Net.Http v4.1.1.0 was remapped to v4.0.0.0
04-28 17:52:48.832 D/Mono    ( 4627): Assembly Ref addref Gelf4Net.HttpAppender[0xebbcd0a0] -> System.Net.Http[0xcbb05140]: 3

Наконец, журналы присутствуют только в консоли (я не помещал здесь код, но он работает хорошо). Кто-нибудь знает, как сделать так, чтобы он мог работать и через http, потому что на сервер ничего не приходит?

...