เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เด’เดฐเต .เดจเต†เดฑเตเดฑเต เดฎเตˆเด•เตเดฐเต‹ เดธเตผเดตเต€เดธเต เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเดฟเตฝ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เด’เดฐเต .เดจเต†เดฑเตเดฑเต เดฎเตˆเด•เตเดฐเต‹ เดธเตผเดตเต€เดธเต เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเดฟเตฝ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดฒเต‹เด—เดฟเด‚เด—เต เดตเดณเดฐเต† เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เด’เดฐเต เดกเดตเดฒเดชเตเดชเตผ เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด…เดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เด…เดŸเดฟเดคเตเดคเดฑเดฏเดฟเตฝ เดคเดจเตเดจเต† เดธเตเดฅเดพเดชเดฟเด•เตเด•เต‡เดฃเตเดŸ เด’เดฐเต เด•เดฒเตเดฒเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเต, เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เดชเต†เดŸเตเดŸเต†เดจเตเดจเต เดฌเดพเดงเดฟเด•เตเด•เตเด‚.

.เดจเต†เดฑเตเดฑเต เด•เต‹เตผ 3 เด’เดฐเต เดฎเดฟเด•เดšเตเดš เดšเต‡เตผเดคเตเดคเต HTTP เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เดณเดฟเตฝ เดชเดฐเดธเตเดชเดฐเดฌเดจเตเดงเด‚ เดธเด‚เดชเตเดฐเต‡เดทเดฃเด‚ เดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เด‡เดจเตเดฑเตผ-เดธเตผเดตเต€เดธเต เด•เดฎเตเดฎเตเดฏเต‚เดฃเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เดจเต‡เดฐเดฟเดŸเตเดŸเตเดณเตเดณ HTTP เด•เต‹เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดˆ เด”เดŸเตเดŸเต-เด“เดซเต-เดฆเดฟ-เดฌเต‹เด•เตเดธเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดชเตเดฐเดฏเต‹เดœเดจเดชเตเดชเต†เดŸเตเดคเตเดคเดพเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฌเดพเด•เตเด•เต†เตปเดกเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเตฝ เด’เดฐเต เดธเดจเตเดฆเต‡เดถ เดฌเตเดฐเต‹เด•เตเด•เตผ (เดฑเดพเดฌเดฟเดฑเตเดฑเตเดŽเด‚เด•เตเดฏเต, เด•เดพเดซเตเด• เดฎเตเดคเดฒเดพเดฏเดต) เดตเดดเดฟเดฏเตเดณเตเดณ เด‡เดŸเดชเต†เดŸเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เดˆ เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเดฟเดฒเต‚เดŸเต† เดชเดฐเดธเตเดชเดฐ เดฌเดจเตเดงเดคเตเดคเดฟเดจเตเดฑเต† เดชเดถเตเดšเดพเดคเตเดคเดฒเด‚ เด•เตˆเดฎเดพเดฑเตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพ เด‡เดชเตเดชเต‹เดดเตเด‚ เดตเดฟเดทเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดตเต†เดฌเต-เดŽเดชเดฟเด เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดŽเดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เดฒเต‹เด—เดฟเด‚เด—เต เดธเด‚เด˜เดŸเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚

  • เดธเตเดตเดคเดจเตเดคเตเดฐ เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต† เดฒเต‹เด—เตเด•เตพ เดคเดฎเตเดฎเดฟเตฝ เดŽเตปเดกเต-เดŸเต-เดŽเตปเดกเต เด•เต‹เดฑเดฟเดฒเต‡เดทเตป เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเด•, เด…เดคเตเดตเดดเดฟ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เตเดฒเดฏเดจเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดฎเต‚เดฒเดฎเตเดฃเตเดŸเดพเดฏ เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚

  • เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเต‹เดŸเตเด•เต‚เดŸเดฟเดฏ เด’เดฐเตŠเดฑเตเดฑ เดŽเตปเดŸเตเดฐเดฟ เดชเต‹เดฏเดฟเดจเตเดฑเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด•, เด…เดคเตเดตเดดเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตโ€Œเด•เตเด•เต เดชเต‹เดฒเตเด‚ เดฒเต‹เด—เดฟเด‚เด—เต เดŸเต‚เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเดพเด•เตเด‚, "เด…เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดเดกเดฟเดฏเตเดณเตเดณ เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เด’เดฐเต เดชเดฟเดถเด•เต เดฒเดญเดฟเดšเตเดšเต" เดชเต‹เดฒเตเดณเตเดณ เดšเต‹เดฆเตเดฏเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเดพเด•เตเด‚.

เด†เดฆเตเดฏเด‚, เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เด’เดฐเต เดฒเต‹เด—เดฟเด‚เด—เต เดฆเดพเดคเดพเดตเดฟเดจเต† เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด†เดงเตเดจเดฟเด• เดฒเต‹เด—เดฟเด‚เด—เดฟเดจเตเดณเตเดณ เดชเตเดฐเดงเดพเดจ เด†เดตเดถเตเดฏเด•เดค เด˜เดŸเดจเดฏเดพเดฃเต, เด…เดคเดพเดฏเดคเต. เดจเดฎเตเดฎเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เดซเตเดฒเดพเดฑเตเดฑเต เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด•เตŠเดฃเตเดŸเดฒเตเดฒ, เดฎเดฑเดฟเดšเตเดšเต เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต. เด…เดคเตเดคเดฐเด‚ เดฒเต‹เด—เตเด•เตพเด•เตเด•เต เดจเดจเตเดฆเดฟ, เดตเตเดฏเดคเตเดฏเดธเตเดค เดตเต€เด•เตเดทเดฃเด•เต‹เดฃเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดžเด™เตเด™เดณเตเดŸเต† เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเตเดŸเต† เด•เดพเดดเตเดšเด•เตพ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเดจเตเด‚ เดตเดฟเดถเด•เดฒเดจเด™เตเด™เตพ เดจเดŸเดคเตเดคเดพเดจเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดฏเตเด‚.

เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดธเต†เดฑเดฟเดฒเต‹เด—เต เดชเดพเด•เตเด•เต‡เดœเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด˜เดŸเดจเดพเดชเดฐเดฎเดพเดฏ เดฒเต‹เด—เดฟเด‚เด—เดฟเดจเตเด‚ เดธเดฎเตเดชเดจเตเดจเดฎเดพเดฏ เด†เดกเต-เด“เตบ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเด‚ เดฎเดฟเด•เดšเตเดš เดชเดฟเดจเตเดคเตเดฃเดฏเตเดฃเตเดŸเต. เด‡เดคเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด…เดŸเดฟเดธเตเดฅเดพเดจ เด˜เดŸเตเดŸเด™เตเด™เตพ เดžเดพเตป เด’เดดเดฟเดตเดพเด•เตเด•เตเด‚ (เดˆ เดตเดฟเดทเดฏเดคเตเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดงเดพเดฐเดพเดณเด‚ เดฒเต‡เด–เดจเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚)

  • เดธเต†เดฑเดฟเดฒเต‹เด—เต เด‡เดคเดฟเดจเด•เด‚ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดกเดฟเดชเตปเดกเตปเดธเดฟ เด‡เดžเตเดšเด•เตเดทเตป เดชเตเดฐเตŠเดตเตˆเดกเตผเด•เตเด•เตเดณเตเดณ เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฒเต‹เด—เตผ เด†เดฃเต

  • เด…เดคเดฟเดจเตเดฑเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดธเดจเตเดฆเตผเดญ เด—เตเดฃเด™เตเด™เดณเตเดณเตเดณ เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเตเดŸเต† เดธเดฎเตเดชเตเดทเตเดŸเต€เด•เดฐเดฃเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต (Enrich.FromLogContext)

เดธเต†เดฑเดฟเดฒเต‹เด—เดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดฏเดฏเตโ€Œเด•เตเด•เต‡เดฃเตเดŸ เด•เต‡เดจเตเดฆเตเดฐเต€เด•เตƒเดค เดฒเต‹เด—เต เดถเต‡เด–เดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเด‚. เด’เดฐเตเดชเด•เตเดทเต‡ เด‡เดจเตเดจเดคเตเดคเต† เดเดฑเตเดฑเดตเตเด‚ เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฏ เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เด“เดชเตเดทเตป ELK เดธเตเดฑเตเดฑเดพเด•เตเด•เต (Elasticsearch, Logstash, Kibana) เด†เดฃเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฎเตเด•เตเด•เต เด…เดคเต เดŽเดŸเตเด•เตเด•เดพเด‚. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เด“เดซเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ Logz.IO โ€” เด’เดฐเต เดธเต—เดœเดจเตเดฏ เดชเตเดฒเดพเดจเดฟเดจเดพเดฏเดฟ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดคเดคเดฟเดจเต เดถเต‡เดทเด‚, เดฒเต‚เดธเต€เตป เดธเต†เตผเดšเตเดšเต เดŽเดžเตเดšเดฟเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เดถเด•เตเดคเดฟเดฏเตเด‚ เดžเด™เตเด™เดณเตเดŸเต† เด•เตˆเดฏเดฟเดฒเตเดฃเตเดŸเต.

เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเดพเด•เตเด•เต‡เดœเต เดšเต‡เตผเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดžเด™เตเด™เตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต Serilog.Sinks.Logzio

Install-Package Serilog.Sinks.Logzio

เดžเด™เตเด™เดณเตเดŸเต† เดฒเต‹เด—เดฑเดฟเดจเตเดฑเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เต เด…เดจเตเดฌเดจเตเดง เดŽเตปเดฑเต€เดšเตเดšเตผ เดšเต‡เตผเด•เตเด•เตเด•, เด…เดคเดฟเดจเต เด’เดฐเต เด†เด•เตเดธเดธเต เดŸเต‹เด•เตเด•เตบ เดจเตฝเด•เตเด•

LoggerConfiguration loggerConfig = new LoggerConfiguration();
loggerConfig.WriteTo.Logzio(secrets.LogzioToken, 10, TimeSpan.FromSeconds(10), null, LogEventLevel.Debug);

เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เด•เตบเดธเต‹เดณเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด•เดฟเดฌเดพเดจเดฏเดฟเดฒเตเด‚ เดžเด™เตเด™เดณเตเดŸเต† เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดฏเตเด‚.

เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เด’เดฐเต .เดจเต†เดฑเตเดฑเต เดฎเตˆเด•เตเดฐเต‹ เดธเตผเดตเต€เดธเต เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเดฟเตฝ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด‡เดจเตเดฑเตผเดซเต†เดฏเดฟเดธเตเด•เตพ

เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เด’เดฐเต .เดจเต†เดฑเตเดฑเต เดฎเตˆเด•เตเดฐเต‹ เดธเตผเดตเต€เดธเต เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเดฟเตฝ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด’เดฐเต เดธเต‡เดตเดจ-เดคเดฐเด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ, เดชเตเดฑเด‚ เดฒเต‹เด•เดตเตเดฎเดพเดฏเตเดณเตเดณ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เดฐเดฃเตเดŸเต เดชเตเดฐเดงเดพเดจ เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เดณเต† เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚, เด…เดตเดฏเต† เดฒเด‚เดฌเดฎเดพเดฏเตเด‚ เดคเดฟเดฐเดถเตเดšเต€เดจเดฎเดพเดฏเตเด‚ เดจเดฟเดถเตเดšเดฏเดฟเด•เตเด•เดพเด‚. เด•เตเดฒเดฏเดจเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด•เต‹เดณเตเด•เตพ เดตเดฐเตเดจเตเดจ เด’เดฐเต เดตเต†เดฌเต API เด†เดฃเต เดตเต†เตผเดŸเตเดŸเดฟเด•เตเด•เตฝ เด‡เดจเตเดฑเตผเดซเต‡เดธเต. เดฎเดฑเตเดฑเต เด†เดจเตเดคเดฐเดฟเด• เดธเต‡เดตเดจเด™เตเด™เดณเตเดฎเดพเดฏเดฟ เดกเดพเดฑเตเดฑ เด•เตˆเดฎเดพเดฑเดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดธเดจเตเดฆเต‡เดถ เดฌเตเดฐเต‹เด•เตเด•เดฑเดพเดฃเต เดคเดฟเดฐเดถเตเดšเต€เดจเด‚.

เดˆ เด“เดฐเต‹ เด‡เดจเตเดฑเตผเดซเต‡เดธเดฟเดฒเตเด‚ เดชเดฐเดธเตเดชเดฐเดฌเดจเตเดงเด‚ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด˜เดŸเตเดŸเด™เตเด™เตพ เดจเดฎเตเด•เตเด•เต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเด‚.

HTTP เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเดฟเดฒเต† เดชเดฐเดธเตเดชเดฐเดฌเดจเตเดงเด‚

เด•เดดเดฟเดฏเตเดจเตเดจเดคเตเดฐ เดตเดฟเดตเดฐเด™เตเด™เตพ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เดคเตเดŸเด•เตเด•เดคเตเดคเต‹เดŸเต เด•เดดเดฟเดฏเตเดจเตเดจเดคเตเดฐ เด…เดŸเตเดคเตเดคเต เดžเด™เตเด™เตพ เด’เดฐเต เด•เต‹เดฑเดฟเดฒเต‡เดทเตป เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด…เดคเดพเดฏเดคเต. เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡เดฏเดฟเตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดจเต‡เดฐเดฟเดŸเตเดŸเต เด•เตเดฒเดฏเดจเตเดฑเดฟเตฝ (เดฎเตŠเดฌเตˆเตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเต†เดฌเต). เด‡เดจเตเดจเต เดžเด™เตเด™เตพ เด’เดฐเต เดฌเดพเด•เตเด•เต†เตปเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดพเดฃเต เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดŽเดจเตเดจเดคเดฟเดจเดพเตฝ, เดตเต†เดฌเต API-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดŽเดฒเตเดฒเดพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเดฟเดฒเตเด‚ เดจเดฟเตผเดฌเดจเตเดงเดฎเดพเดฏเตเด‚ "เดŽเด•เตเดธเต-เด•เต‹เดฑเดฟเดฒเต‡เดทเตป-เดเดกเดฟ" เดนเต†เดกเดฑเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด•เดค เดžเด™เตเด™เตพ เด…เดคเดฟเตฝ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚.

เด’เดฐเต เดชเดพเด•เตเด•เต‡เดœเต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต เดชเดฐเดธเตเดชเดฐเดฌเดจเตเดงเด‚ เดเดกเดฟ, เดจเดฎเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเต‚เดฒเตเดฏเด‚ เดŽเดŸเตเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เด‡เดคเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚

Install-Package CorrelationID

เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเดฒเต‡เด•เตเด•เต เด‡เดคเต เดšเต‡เตผเด•เตเด•เดพเด‚

public class Startup
{
    public void Configure(IApplicationBuilder application)
    {
        application
	    .UseCorrelationId(new CorrelationIdOptions
        {
            Header = "X-Correlation-ID",
            IncludeInResponse = false,
            UpdateTraceIdentifier = false,
            UseGuidForCorrelationId = false
        });
    }
}

เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดซเดฟเตฝเดŸเตเดŸเตผ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚:

public sealed class ApiRequestFilter : ActionFilterAttribute
{
    public ApiRequestFilter(IApiRequestTracker apiRequestTracker, ICorrelationContextAccessor correlationContextAccessor)
    {
        _correlationContextAccessor = correlationContextAccessor ?? throw new ArgumentNullException(nameof(correlationContextAccessor));
    }
    
    private readonly ICorrelationContextAccessor _correlationContextAccessor;
    
    public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        if (!Guid.TryParse(_correlationContextAccessor.CorrelationContext.CorrelationId, out Guid correlationId))
        {
            context.Result = new BadRequestResult();
            return;
        }
    
        await next.Invoke();
    }
    
    public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
    {
        await next.Invoke();
    }
}

เด•เต‚เดŸเดพเดคเต† เด‡เดคเต เด•เตบเดŸเตเดฐเต‹เดณเดฑเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเด•

[Route("[controller]")]
[ApiController]
[ServiceFilter(typeof(ApiRequestFilter))]
public class CarsController : ControllerBase
{

}

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เด•เตบเดŸเตเดฐเต‹เดณเตผ เดŽเดฒเตเดฒเดพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพเด•เตเด•เตเดฎเดพเดฏเดฟ 400 เดฎเต‹เดถเด‚ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เด…เดจเตเดฌเดจเตเดง เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเดฒเตเดฒเดพเดคเต† เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚.

เด•เตเดฒเดฏเดจเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เดฒเดญเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดฟเดฏ เดถเต‡เดทเด‚, เดžเด™เตเด™เตพ เด…เดคเต เดฒเต‹เด—เดฟเด‚เด—เต เดธเดจเตเดฆเตผเดญเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เดฃเด‚, เด‡เดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เด’เดฐเต เดซเตเดฐเต†เดฏเดฟเดฎเดฟเด‚เด—เต เดฒเต†เดฏเตผ เด‰เดฃเตเดŸเดพเด•เตเด•เตเด‚:

public class CorrelationIdContextLogger
{
    public CorrelationIdContextLogger(RequestDelegate next)
    {
        _next = next ?? throw new ArgumentNullException(nameof(next));
    }
    
    readonly RequestDelegate _next;
    
    public async Task InvokeAsync(HttpContext httpContext, ILogger<CorrelationIdContextLogger> logger, ICorrelationContextAccessor correlationContextAccessor)
    {
        if (Guid.TryParse(correlationContextAccessor.CorrelationContext.CorrelationId, out Guid correlationId))
        {
            using (logger.BeginScopeWith(("CorrelationId", correlationId)))
            {
                await _next(context);
            }
        }
        else
        {
            await _next(context);
        }
    }
}

เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ, Microsoft.Extensions.Logging.Abstractions เดชเดพเด•เตเด•เต‡เดœเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต ILogger เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด…เดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเต‚เดฒเตเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด‚.

public static IDisposable BeginScopeWith(this ILogger logger, params (string key, object value)[] keys)
{
    return logger.BeginScope(keys.ToDictionary(x => x.key, x => x.value));
}

เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเดฒเต‡เด•เตเด•เต เดžเด™เตเด™เตพ เด’เดฐเต เดฒเต†เดฏเตผ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดซเดฒเด‚ เดจเต‡เดŸเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

public class Startup
{
    public void Configure(IApplicationBuilder application)
    {
        application.UseMiddleware<CorrelationIdContextLogger>();
    }
}

เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เดณเตเดŸเต† เดตเต†เดฌเต API-เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดตเดดเดฟ เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเดฟเดฒเตเด‚ เด…เดต เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เด•เต‹เดฑเดฟเดฒเต‡เดทเตป เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เด’เดฐเต .เดจเต†เดฑเตเดฑเต เดฎเตˆเด•เตเดฐเต‹ เดธเตผเดตเต€เดธเต เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเดฟเตฝ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดฌเตเดฐเต‹เด•เตเด•เตผ เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเดฟเดฒเต† เดชเดฐเดธเตเดชเดฐเดฌเดจเตเดงเด‚

เดธเดจเตเดฆเต‡เดถ เดฌเตเดฐเต‹เด•เตเด•เตผ เดฎเตเด–เต‡เดจ เด•เต‹เดฑเดฟเดฒเต‡เดทเตป เดเดกเดจเตเดฑเดฟเดซเดฏเดฑเดฟเดจเตเดฑเต† เดชเตเดฐเด•เตเดทเต‡เดชเดฃเดตเตเด‚ เดธเตเดตเต€เด•เดฐเดฃเดตเตเด‚ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเด‚. เดžเด™เตเด™เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เดžเด™เตเด™เตพ RabbitMQ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด•เต‚เดŸเดพเดคเต† MassTransit เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต เด•เตเดฒเดฏเดจเตเดฑเดพเดฏเดฟ เดŽเดŸเตเด•เตเด•เตเด‚. เดตเต€เดฃเตเดŸเตเด‚, MassTransit-เดจเตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเดพเดฐเด‚เดญ เดธเดœเตเดœเต€เด•เดฐเดฃเด‚ เด’เดดเดฟเดตเดพเด•เตเด•เดฟ เดฒเต‹เด—เดฟเด‚เด—เต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚.

เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพเด•เตเด•เต MassTransit-เดจเตเดฑเต† เดฒเต‹เด—เตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดพเด‚; เด‡เดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเดพเด•เตเด•เต‡เดœเต เดšเต‡เตผเด•เตเด•เตเด‚. MassTransit.SerilogIntegration

Install-Package MassTransit.SerilogIntegration

เด‡เดชเตเดชเต‹เตพ MassTransit เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เตผ เดšเต‡เตผเดคเตเดค เดถเต‡เดทเด‚, เดจเดฎเตเด•เตเด•เต เดซเตเดฐเต†เดฏเดฟเด‚เดตเตผเด•เตเด•เต เดฒเต‹เด—เตเด•เตพ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚.

services
    .AddSingleton(provider =>
        {
            return Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.UseSerilog();
            });
        });

"เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏเดฟ" เดŽเดจเตเดจ เดฎเต‚เดฒเตเดฏเดฎเตเดณเตเดณ เด’เดฐเต เดธเด‚เดคเดฟเด‚เด—เตเดกเตบเดฎเต†เดธเต‡เดœเต เด‡เดตเดจเตเดฑเต เด…เดฏเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เดณเตเดŸเต† เด…เดชเต‡เด•เตเดท เด’เดฐเต POST เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเต‹เดŸเต เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด•. เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดณเตเดณ เด•เดฐเดพเตผ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเด‚:

namespace MbMessages
{
    public interface ISomethingDoneMessageV1
    {
        string Value { get; }
    }
}

MassTransit เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ เดฌเตเดฐเต‹เด•เตเด•เตผ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจ เด’เดฐเต เด•เดตเดฑเดพเดฃเต. เดŽเตปเดตเดฒเดชเตเดชเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

{
  "messageId": "59020000-5dba-0015-10b8-08d77ec28593",
  "requestId": "59020000-5dba-0015-5674-08d77ec28592",
  "conversationId": "59020000-5dba-0015-bca8-08d77ec28594",
  "destinationAddress": "rabbitmq://bear.rmq.cloudamqp.com/aelzlsta/ya.servicetemplate.receiveendpoint",
  "headers": {},
  "messageType": [
    "urn:message:MbMessages:ISomethingDoneMessageV1"
  ],
  "message": {
    "value": "done"
  }
}

เดซเตเดฐเต†เดฏเดฟเด‚เดตเตผเด•เตเด•เดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดธเต‡เดตเดจ เดซเต€เตฝเดกเตเด•เตพ เดธเดจเตเดฆเต‡เดถเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เดˆ เดŽเตปเดตเดฒเดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เด…เดงเดฟเด• เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เดšเต‡เตผเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเตเดฃเตเดŸเต. เด•เต‚เดŸเดพเดคเต†, MassTransit-เดจเต เดšเดฟเดฒ เด“เดชเตเดทเดฃเตฝ เดซเต€เตฝเดกเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดฌเดฟเตฝเดฑเตเดฑเต-เด‡เตป เดŸเต‚เดณเตเด•เตพ เด‰เดฃเตเดŸเต, เด…เดคเดฟเตฝ เดเดฑเตเดฑเดตเตเด‚ เดฐเดธเด•เดฐเดฎเดพเดฏเดคเต เด•เต‹เดฑเดฟเดฒเต‡เดทเตป เดเดกเดจเตเดฑเดฟเดซเดฏเตผ CorrelationId เด†เดฃเต.

เดธเดจเตเดฆเต‡เดถ เด•เดฐเดพเดฑเดฟเดฒเต‡เด•เตเด•เต CorrelatedBy เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดšเต‡เตผเด•เตเด•เดพเด‚:

namespace MbMessages
{
    public interface ISomethingDoneMessageV1 : CorrelatedBy<Guid>
    {
        string Value { get; }
    }
}

เดจเดฎเตเด•เตเด•เต เด…เดคเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเด‚, เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ CorrelationId เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตเด•เต เด’เดฐเต เดฎเต‚เดฒเตเดฏเด‚ เดจเตฝเด•เดพเด‚:

internal class SomethingDoneMessageV1 : ISomethingDoneMessageV1
{
    internal SomethingDoneMessageV1(Guid correlationId, string value)
    {
        CorrelationId = correlationId;
        Value = value;
    }
    
    public Guid CorrelationId { get; private set; }
    public string Value { get; private set; }
}

เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตโ€Œเดค เดธเดจเตเดฆเต‡เดถเด‚ เดจเต‹เด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด•เต‹เดฑเดฟเดฒเต‡เดทเตป เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เดžเด™เตเด™เดณเตเดŸเต† เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดญเดพเด—เดฎเดพเดฏเดฟ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดŽเตปเดตเดฒเดชเตเดชเดฟเดจเตเดฑเต† เดญเดพเด—เดตเตเด‚ เด†เดฏเดฟ เดฎเดพเดฑเดฟเดฏเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เด•เดพเดฃเดพเด‚ - เดˆ เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เด‡เดชเตเดชเต‹เตพ เดŽเดฒเตเดฒเดพ MassTransit เดฒเต‹เด—เตเด•เดณเดฟเดฒเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด…เดคเดพเดฏเดคเต เด‡เดคเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ เดธเดจเตเดฆเต‡เดถ เดฌเตเดฐเต‹เด•เตเด•เตผ เดคเดฒเดคเตเดคเดฟเดฒเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เดžเด™เตเด™เตพเด•เตเด•เต.

{
  "messageId": "59020000-5dba-0015-10b8-08d77ec28593",
  "requestId": "59020000-5dba-0015-5674-08d77ec28592",
  "conversationId": "59020000-5dba-0015-bca8-08d77ec28594",
  "correlationId": "c7ff562a-b639-415b-9add-c9e524a727cc",
  "destinationAddress": "rabbitmq://bear.rmq.cloudamqp.com/aelzlsta/ya.servicetemplate.receiveendpoint",
  "headers": {},
  "messageType": [
    "urn:message:MbMessages:ISomethingDoneMessageV1"
  ],
  "message": {
    "correlationId": "c7ff562a-b639-415b-9add-c9e524a727cc",
    "value": "Hello"
  }
}

เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดˆ เดธเต‡เดตเดจ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เดณเตเดŸเต† เดฒเต‹เด—เดฟเด‚เด—เต เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดžเด™เตเด™เตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต; เด‡เดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเดพเด•เตเด•เต‡เดœเต เดšเต‡เตผเด•เตเด•เตเด‚. Serilog.Enrichers.MassTransitMessage. MassTransit เดธเดจเตเดฆเต‡เดถ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเดฒเต‡เด•เตเด•เต เดชเดพเด•เตเด•เต‡เดœเต เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดธเดจเตเดฆเต‡เดถ เดธเดจเตเดฆเตผเดญเดคเตเดคเต† เด’เดฐเต เดคเตเดฐเต†เดกเต-เดธเต‡เดซเต เดธเตเดฑเตเดฑเดพเด•เตเด•เดฟเดฒเต‡เด•เตเด•เต เด…เดŸเตเด•เตเด•เตเดจเตเดจเต. เดธเต†เดฑเดฟเดฒเต‹เด—เต เดธเตเดฑเตเดฑเดพเด•เตเด•เดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดจเตเดฆเตผเดญเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดˆ เด…เดงเดฟเด• เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เดžเด™เตเด™เดณเตเดŸเต† เดฒเต‹เด—เต เด’เดฌเตเดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

Install-Package Serilog.Enrichers.MassTransitMessage

MassTransit เตฝ เดžเด™เตเด™เตพ เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเตผ เดคเดฟเดฐเตเด•เตเดจเตเดจเต

services
    .AddSingleton(provider =>
        {
            return Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.UseSerilog();
                cfg.UseSerilogMessagePropertiesEnricher();
            });
        });

เดธเต†เดฑเดฟเดฒเต‹เด—เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดžเด™เตเด™เตพ เด’เดฐเต เดŽเตปเดฑเต€เดšเตเดšเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต

Log.Logger = new LoggerConfiguration()
    .Enrich.FromMassTransitMessage()
    .CreateLogger();

RabbitMQ เด•เตเดฏเต‚เดตเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดจเตเดฆเต‡เดถเด‚ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต MassTransit เดŽเตปเดตเดฒเดชเตเดชเดฟเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เดณเดฟเดฒเต‡เด•เตเด•เตเด‚ เด†เด•เตโ€Œเดธเดธเต เด‰เดณเตเดณเดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจ เด•เต‹เดฑเดฟเดฒเต‡เดทเตป เดเดกเดจเตเดฑเดฟเดซเดฏเตผ เด‰เดชเดญเต‹เด— เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเด‚ เด•เต‹เตพ เดšเต†เดฏเดฟเดจเดฟเดฒเต‚เดŸเต† เด•เต‚เดŸเตเดคเตฝ เด•เตˆเดฎเดพเดฑเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚.

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เดณเตเดŸเต† เดฒเต‹เด—เตเด•เดณเดฟเตฝ เด’เดฐเต เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดณเตเดณเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดฎเดฑเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเตเดฎเดพเดฏเดฟ เด‡เดŸเดชเดดเด•เตเดฎเตเดชเต‹เดดเตเด‚ CorrelationId เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดฟ.

เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เด’เดฐเต .เดจเต†เดฑเตเดฑเต เดฎเตˆเด•เตเดฐเต‹ เดธเตผเดตเต€เดธเต เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเดฟเตฝ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด…เดคเดฟเดจเดพเตฝ, .Net เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดฒเต‹เด—เดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด‚, เด’เดฐเต เดฎเต†เดธเต‡เดœเต เดฌเตเดฐเต‹เด•เตเด•เตผ เดตเดดเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดต เดชเต‹เดฒเตเด‚ - เดคเดฟเด•เดšเตเดšเตเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฒเต‹เด—เตเด•เตพ เด’เดฐเต เดชเตเดฐเดถเตเดจเดตเตเดฎเดฟเดฒเตเดฒเดพเดคเต† เดชเดฐเดธเตเดชเดฐเด‚ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเดฟเดจเตเดฑเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต†, เด•เดฟเดฌเดพเดจเดฏเดฟเตฝ เดจเดฎเตเด•เตเด•เดพเดตเดถเตเดฏเดฎเดพเดฏ เดกเดพเดทเตโ€Œเดฌเต‹เตผเดกเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เดฒเต‹เด—เตเด•เตพ เดตเต‡เด—เดคเตเดคเดฟเดฒเตเด‚ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดพเด‚ (เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดณเตเดณ เดšเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เด•เดพเดฃเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต).

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดˆ เดซเต‹เดฎเดฟเตฝ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเต‡เดตเดจเด™เตเด™เดณเตเด‚ เดตเดฟเดตเดฟเดง เดฌเดพเดนเตเดฏ เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เด‡เดŸเดชเต†เดŸเดฒเตเด•เดณเต† เด‰เตพเด•เตเด•เตŠเดณเตเดณเดฟเดฒเตเดฒ, เดŽเดจเตเดจเดพเตฝ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเตเดฑเต† เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เดคเดจเตเดจเต† เด…เดคเตเดคเดฐเด‚ เด•เตเดฐเดฎเด‚ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เดคเดตเดฃ เดจเดฟเด™เตเด™เตพ เดธเตเดตเดฏเด‚ เดจเดจเตเดฆเดฟ เดชเดฑเดฏเตเดจเตเดจ เด•เดพเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เด’เดจเตเดจเดพเดฃเต.

เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚: github.com/a-postx/YA.ServiceTemplate

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

DDoS เดชเดฐเดฟเดฐเด•เตเดทเดฏเตเดณเตเดณ เดธเตˆเดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เตเด•, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ ๐Ÿ”ฅ DDoS เดชเดฐเดฟเดฐเด•เตเดท, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ เด‰เดณเตเดณ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดตเต†เดฌเตโ€Œเดธเตˆเดฑเตเดฑเต เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เต‚ | ProHoster