我正在尝试将 NLog 目标从文件更改为 Graylog 以进行集中日志记录。但这不起作用。我目前正在将我的 Web 项目、SQL Server、域控制器等记录到我的graylog 中,但这些 Web 服务正在使用 Serilog,这非常容易设置。但在我的微服务上,我使用 NLog,它对我来说效果不太好。
我的 NLog 配置如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="solar" xsi:type="Gelf" host="10.0.0.43" port="12201" protocol="Tcp">
<layout xsi:type="GelfLayout">
<parameter name="tags" layout="MySolarService" />
</layout>
</target>
</targets>
<rules>
<logger name="MySolarService" minlevel="Trace" writeTo="solar" />
</rules>
</nlog>
我的代码:
public class Service
{
private static readonly ILogger _logger = NLogBuilder.ConfigureNLog(@"C:\MySolarService\MySolarService\NLog.config").GetLogger("MySolarService");
readonly SolarService _solarService = new ();
readonly System.Timers.Timer timer_60s = new ()
{
Enabled = true,
Interval = 1000,
};
public void Run()
{
timer_60s.Elapsed += new ElapsedEventHandler(OnTimedEvent);
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
if (source == timer_60s)
{
timer_60s.Interval = 60000;
TodoTimer60sAsync();
}
}
public async Task TodoTimer60sAsync()
{
_logger.Error("TJENA GRAYLOGGG MY MAN");
}
}
但是我在graylog端没有收到任何信息,有没有办法查看日志是否成功到达特定目标?我尝试为每个日志添加一个新目标到文件中,效果完美。但在graylog上仍然没有收到任何信息。
我的网络服务中的 Serilog 设置如下:
Serilog.Log.Logger = new LoggerConfiguration()
.Enrich.With(new TagsEnricher("MyWebService"))
.MinimumLevel.Warning()
.WriteTo.GraylogGelf("10.0.0.43", 12201, TransportType.Tcp)
.CreateLogger();
认为您在尝试中添加了太多 GELF。使用
xsi:type="Gelf"
或使用 xsi:type="GelfLayout"
(但不能同时使用)。
使用 NLog.GelfLayout 和 NLog NetworkTarget 的示例:
<target xsi:type="Network" name="solar" address="tcp://10.0.0.43:12201" newLine="true" lineEnding="Null" />
<layout xsi:type="GelfLayout">
<field name="tags" layout="MySolarService" />
</layout>
</target>
示例 NLog.Web.AspNetCore.Targets.Gelf
<target xsi:type="Gelf" name="solar" endpoint="tcp://10.0.0.43:12201" facility="solar" gelfVersion="1.1">
<parameter name="tags" layout="MySolarService" />
</target>
在解决 NLog 问题时,建议添加
throwConfigExceptions="true"
并激活 NLog InternalLogger 并寻找线索。另请参阅:https://github.com/NLog/NLog/wiki/Logging-Troubleshooting