
เดฒเตเดเดฟเดเดเต เดตเดณเดฐเต เดชเตเดฐเดงเดพเดจเดชเตเดชเตเดเตเด เดเดฐเต เดกเดตเดฒเดชเตเดชเตผ เดเดชเดเดฐเดฃเดฎเดพเดฃเต, เดเดจเตเดจเดพเตฝ เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดฎเตเดชเตเตพ, เด เดคเต เดจเดฟเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดฑเต เด เดเดฟเดคเตเดคเดฑเดฏเดฟเตฝ เดคเดจเตเดจเต เดธเตเดฅเดพเดชเดฟเดเตเดเตเดฃเตเด เดเดฐเต เดเดฒเตเดฒเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเต, เด เดฒเตเดฒเดพเดคเตเดคเดชเดเตเดทเด เดฎเตเดเตเดฐเตเดธเตผเดตเตเดธเตเดเตพ เดตเดฟเดเดธเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดฑเต เดธเดเตเดเตเตผเดฃเตเดฃเดค เดชเตเดเตเดเตเดจเตเดจเต เดฌเดพเดงเดฟเดเตเดเตเด.
.เดจเตเดฑเตเดฑเต เดเตเตผ 3 เดเดฐเต เดฎเดฟเดเดเตเด เดเตเตผเดคเตเดคเต , เด เดคเดฟเดจเดพเตฝ เดจเดฟเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเตพ เดเดจเตเดฑเตผ-เดธเตผเดตเตเดธเต เดเดฎเตเดฎเตเดฏเตเดฃเดฟเดเตเดเตเดทเดจเดพเดฏเดฟ เดจเตเดฐเดฟเดเตเดเตเดณเตเดณ HTTP เดเตเดณเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดจเดฟเดเตเดเตพเดเตเดเต เด เดเดเตเดเต-เดเดซเต-เดฆเดฟ-เดฌเตเดเตเดธเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดชเตเดฐเดฏเตเดเดจเดชเตเดชเตเดเตเดคเตเดคเดพเด. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดจเดฟเดเตเดเดณเตเดเต เดฌเดพเดเตเดเตเตปเดกเต เดเตผเดเตเดเดฟเดเตเดเตเดเดฑเดฟเตฝ เดเดฐเต เดธเดจเตเดฆเตเดถ เดฌเตเดฐเตเดเตเดเตผ (เดฑเดพเดฌเดฟเดฑเตเดฑเตเดเดเดเตเดฏเต, เดเดพเดซเตเด เดฎเตเดคเดฒเดพเดฏเดต) เดตเดดเดฟเดฏเตเดณเตเดณ เดเดเดชเตเดเตฝ เดเตพเดชเตเดชเตเดเตเดจเตเดจเตเดตเตเดเตเดเดฟเตฝ, เด เดธเดจเตเดฆเตเดถเดเตเดเดณเดฟเดฒเตเดเต เดชเดฐเดธเตเดชเดฐ เดฌเดจเตเดงเดคเตเดคเดฟเดจเตเดฑเต เดชเดถเตเดเดพเดคเตเดคเดฒเด เดเตเดฎเดพเดฑเตเดจเตเดจเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเต เดจเดฟเดเตเดเตพ เดเดชเตเดชเตเดดเตเด เดตเดฟเดทเดฎเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต.
เด เดฒเตเดเดจเดคเตเดคเดฟเตฝ เดเดเตเดเตพ เดเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดตเตเดฌเต-เดเดชเดฟเด เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดเดเตเดเตเดเตเดเดฏเตเด เดฒเตเดเดฟเดเดเต เดธเดเดเดเดฟเดชเตเดชเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด
เดธเตเดตเดคเดจเตเดคเตเดฐ เดธเตเดตเดจเดเตเดเดณเตเดเต เดฒเตเดเตเดเตพ เดคเดฎเตเดฎเดฟเตฝ เดเตปเดกเต-เดเต-เดเตปเดกเต เดเตเดฑเดฟเดฒเตเดทเตป เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเด, เด เดคเตเดตเดดเดฟ เดจเดฟเดเตเดเตพเดเตเดเต เดเตเดฒเดฏเดจเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เด เดญเตเดฏเตผเดคเตเดฅเดจ เดฎเตเดฒเดฎเตเดฃเตเดเดพเดฏ เดเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเตเด เดเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดเดพเดฃเดพเตป เดเดดเดฟเดฏเตเด
เดธเตเดเดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เดตเดฟเดถเดเดฒเดจเดคเตเดคเตเดเตเดเตเดเดฟเดฏ เดเดฐเตเดฑเตเดฑ เดเตปเดเตเดฐเดฟ เดชเตเดฏเดฟเดจเตเดฑเต เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเตเด, เด เดคเตเดตเดดเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตโเดเตเดเต เดชเตเดฒเตเด เดฒเตเดเดฟเดเดเต เดเตเตพ เดเดชเดฏเตเดเดฟเดเตเดเดพเดจเดพเดเตเด, "เด เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดเดฐเต เด เดญเตเดฏเตผเดคเตเดฅเดจ เดเดกเดฟเดฏเตเดณเตเดณ เด เดชเตเดฒเดฟเดเตเดเตเดทเดจเดฟเตฝ เดเดจเดฟเดเตเดเต เดเดฐเต เดชเดฟเดถเดเต เดฒเดญเดฟเดเตเดเต" เดชเตเดฒเตเดณเตเดณ เดเตเดฆเตเดฏเดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดพเดจเดพเดเตเด.
เดเดฆเตเดฏเด, เดเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเดพเดฏเดฟ เดเดฐเต เดฒเตเดเดฟเดเดเต เดฆเดพเดคเดพเดตเดฟเดจเต เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต. เดเดงเตเดจเดฟเด เดฒเตเดเดฟเดเดเดฟเดจเตเดณเตเดณ เดชเตเดฐเดงเดพเดจ เดเดตเดถเตเดฏเดเดค เดเดเดจเดฏเดพเดฃเต, เด เดคเดพเดฏเดคเต. เดจเดฎเตเดฎเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดฃเตเดเดคเต เดซเตเดฒเดพเดฑเตเดฑเต เดเตเดเตเดธเตเดฑเตเดฑเต เดธเดจเตเดฆเตเดถเดเตเดเตพ เดเตเดฃเตเดเดฒเตเดฒ, เดฎเดฑเดฟเดเตเดเต เดเดฌเตโเดเดเตโเดฑเตเดฑเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดพเดฃเต. เด เดคเตเดคเดฐเด เดฒเตเดเตเดเตพเดเตเดเต เดจเดจเตเดฆเดฟ, เดตเตเดฏเดคเตเดฏเดธเตเดค เดตเตเดเตเดทเดฃเดเตเดฃเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดเตเดเดณเตเดเต เดธเดจเตเดฆเตเดถเดเตเดเดณเตเดเต เดเดพเดดเตเดเดเตพ เดเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดพเดจเตเด เดตเดฟเดถเดเดฒเดจเดเตเดเตพ เดจเดเดคเตเดคเดพเดจเตเด เดเดเตเดเตพเดเตเดเต เดเดดเดฟเดฏเตเด.
เดเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเดพเดฏเดฟ เดเดเตเดเตพ เดธเตเดฑเดฟเดฒเตเดเต เดชเดพเดเตเดเตเดเต เดเดชเดฏเตเดเดฟเดเตเดเตเด, เดเดเดจเดพเดชเดฐเดฎเดพเดฏ เดฒเตเดเดฟเดเดเดฟเดจเตเด เดธเดฎเตเดชเดจเตเดจเดฎเดพเดฏ เดเดกเต-เดเตบ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเด เดฎเดฟเดเดเตเด เดชเดฟเดจเตเดคเตเดฃเดฏเตเดฃเตเดเต. เดเดคเต เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด เดเดฟเดธเตเดฅเดพเดจ เดเดเตเดเดเตเดเตพ เดเดพเตป เดเดดเดฟเดตเดพเดเตเดเตเด (เด เดตเดฟเดทเดฏเดคเตเดคเดฟเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดงเดพเดฐเดพเดณเด เดฒเตเดเดจเดเตเดเตพ เดเดฃเตเดเตเดคเตเดคเดพเตป เดเดดเดฟเดฏเตเด)
เดธเตเดฑเดฟเดฒเตเดเต เดเดคเดฟเดจเดเด เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดคเดฟเดเตเดเตเดฃเตเดเต, เดจเดฟเดเตเดเดณเตเดเต เดกเดฟเดชเตปเดกเตปเดธเดฟ เดเดเตเดเดเตเดทเตป เดชเตเดฐเตเดตเตเดกเตผเดเตเดเตเดณเตเดณ เดกเดฟเดซเตเตพเดเตเดเต เดฒเตเดเตผ เดเดฃเต
เด เดคเดฟเดจเตเดฑเต เดเตเตบเดซเดฟเดเดฑเตเดทเดจเดฟเตฝ เดธเดจเตเดฆเตผเดญ เดเตเดฃเดเตเดเดณเตเดณเตเดณ เดธเดจเตเดฆเตเดถเดเตเดเดณเตเดเต เดธเดฎเตเดชเตเดทเตเดเตเดเดฐเดฃเด เดเตพเดชเตเดชเตเดเตเดจเตเดจเต (Enrich.FromLogContext)
เดธเตเดฑเดฟเดฒเตเดเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดจเตเดฆเตเดถเดเตเดเตพ เด เดฏเดฏเตโเดเตเดเตเดฃเตเด เดเตเดจเตเดฆเตเดฐเตเดเตเดค เดฒเตเดเต เดถเตเดเดฐเดฃ เดธเดเดตเดฟเดงเดพเดจเด เดคเดฟเดฐเดเตเดเตเดเตเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เด เดเตเดคเตเดค เดเดเตเดเด. เดเดฐเตเดชเดเตเดทเต เดเดจเตเดจเดคเตเดคเต เดเดฑเตเดฑเดตเตเด เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฏ เดเดชเตเดชเตบ เดธเตเดดเตเดธเต เดเดชเตเดทเตป ELK เดธเตเดฑเตเดฑเดพเดเตเดเต (Elasticsearch, Logstash, Kibana) เดเดฃเต, เด เดคเดฟเดจเดพเตฝ เดจเดฎเตเดเตเดเต เด เดคเต เดเดเตเดเตเดเดพเด. เดเดคเต เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดเดเตเดเตพ เดเดซเตผ เดเดชเดฏเตเดเดฟเดเตเดเตเด โ เดเดฐเต เดธเตเดเดจเตเดฏ เดชเตเดฒเดพเดจเดฟเดจเดพเดฏเดฟ เดฐเดเดฟเดธเตเดฑเตเดฑเตผ เดเตเดฏเตเดคเดคเดฟเดจเต เดถเตเดทเด, เดฒเตเดธเตเตป เดธเตเตผเดเตเดเต เดเดเตเดเดฟเดจเตเดฑเต เดเดฒเตเดฒเดพ เดถเดเตเดคเดฟเดฏเตเด เดเดเตเดเดณเตเดเต เดเตเดฏเดฟเดฒเตเดฃเตเดเต.
เดเดเตเดเดณเตเดเต เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเดฒเตเดเตเดเต เดชเดพเดเตเดเตเดเต เดเตเตผเดเตเดเตเด เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดเดเตเดเตพ เดเตเดฏเตเดฏเตเดฃเตเดเดคเต
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-เดจเตเดฑเต เดฒเตเดเตเดเตพ เดเตพเดชเตเดชเตเดเตเดคเตเดคเดพเด; เดเดคเดฟเดจเดพเดฏเดฟ เดเดเตเดเตพ เดเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเดฟเดฒเตเดเตเดเต เดเดฐเต เดชเดพเดเตเดเตเดเต เดเตเตผเดเตเดเตเด.
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"
}
}
เดธเดจเตเดฆเตเดถเดคเตเดคเดฟเดจเตเดฑเต เด เดธเตเดตเดจ เดชเตเดฐเตเดชเตเดชเตผเดเตเดเดฟเดเดณเตเดเต เดฒเตเดเดฟเดเดเต เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตเดฏเตเด เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดเดเตเดเตพ เดเตเดฏเตเดฏเตเดฃเตเดเดคเต; เดเดคเดฟเดจเดพเดฏเดฟ เดเดเตเดเตพ เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเดฒเตเดเตเดเต เดเดฐเต เดชเดพเดเตเดเตเดเต เดเตเตผเดเตเดเตเด. . 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 เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเดณเดฟเดฒเต เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดเดพเดเตเดจเตเดจ เดฒเตเดเดฟเดเดเต เดธเดฟเดธเตเดฑเตเดฑเด, เดเดฐเต เดฎเตเดธเตเดเต เดฌเตเดฐเตเดเตเดเตผ เดตเดดเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดต เดชเตเดฒเตเด - เดคเดฟเดเดเตเดเตเด เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏ เดฎเตเดเตเดฐเตเดธเตผเดตเตเดธเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฒเตเดเตเดเตพ เดเดฐเต เดชเตเดฐเดถเตเดจเดตเตเดฎเดฟเดฒเตเดฒเดพเดคเต เดชเดฐเดธเตเดชเดฐเด เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดเตเดเดณเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดจเตเดจเต. เดเดฒเดพเดธเตเดฑเตเดฑเดฟเดเต เดธเตเตผเดเตเดเดฟเดจเตเดฑเต เดธเดนเดพเดฏเดคเตเดคเตเดเต, เดเดฟเดฌเดพเดจเดฏเดฟเตฝ เดจเดฎเตเดเตเดเดพเดตเดถเตเดฏเดฎเดพเดฏ เดกเดพเดทเตโเดฌเตเตผเดกเตเดเตพ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดเตเดฃเตเดเต เดฒเตเดเตเดเตพ เดตเตเดเดคเตเดคเดฟเดฒเตเด เดธเตเดเดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏเตเด เดตเดฟเดถเดเดฒเดจเด เดเตเดฏเตเดฏเดพเด (เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดชเตเดธเตเดฑเตเดฑเดฟเดจเตเดณเตเดณ เดเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เดเดพเดฃเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต).
เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, เด เดซเตเดฎเดฟเตฝ เดฒเตเดเดฟเตป เดเตเดฏเตเดฏเตเดจเตเดจเดคเต เดจเดฟเดเตเดเดณเตเดเต เดธเตเดตเดจเดเตเดเดณเตเด เดตเดฟเดตเดฟเดง เดฌเดพเดนเตเดฏ เดธเดฟเดธเตเดฑเตเดฑเดเตเดเดณเตเด เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเดเดชเตเดเดฒเตเดเดณเต เดเตพเดเตเดเตเดณเตเดณเดฟเดฒเตเดฒ, เดเดจเตเดจเดพเตฝ เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดตเดฟเดเดธเดจเดคเตเดคเดฟเดจเตเดฑเต เดคเตเดเดเตเดเดคเตเดคเดฟเตฝ เดคเดจเตเดจเต เด เดคเตเดคเดฐเด เดเตเดฐเดฎเด เดธเตเดฅเดพเดชเดฟเดเตเดเตเดจเตเดจเดคเต เดเดจเตเดจเดฟเดฒเดงเดฟเดเด เดคเดตเดฃ เดจเดฟเดเตเดเตพ เดธเตเดตเดฏเด เดจเดจเตเดฆเดฟ เดชเดฑเดฏเตเดจเตเดจ เดเดพเดฐเตเดฏเดเตเดเดณเดฟเตฝ เดเดจเตเดจเดพเดฃเต.
เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเตฝ เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดเดพเดเตเดจเตเดจ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต เดธเตเดดเตเดธเต เดเตเดกเต เดจเดฟเดเตเดเตพเดเตเดเต เดฎเดจเดธเตเดธเดฟเดฒเดพเดเตเดเดพเตป เดเดดเดฟเดฏเตเด:
เด เดตเดฒเดเดฌเด: www.habr.com
