.NET Core NLog 通过 GELF 到 Graylog 不起作用

问题描述 投票:0回答:1

我正在尝试将 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();
.net logging nlog graylog
1个回答
0
投票

认为您在尝试中添加了太多 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

© www.soinside.com 2019 - 2024. All rights reserved.