我已经创建了控制台应用程序(.NetCore),添加了gelf4Net库,实现了解决方案,加载了配置,并使它能够将日志发送到graylog。日志存在于控制台,文件和服务器中。
现在我需要在Xamarin Forms应用程序中做同样的事情(现在仅适用于android)。我已经添加了类库,安装了gelf4net库。我已将config.xml作为嵌入式资源添加到Xamarin Forms项目。我获取了config的内容,并将其另存为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工作,因为服务器什么都没有?