Можно ли записывать в кеш с помощью serilog? - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь писать логи в кеш с помощью serilog. Возможно ли это?

namespace MemoryCacheApplication.Controllers    
{    
    public class HomeController : Controller    
    {    
        private readonly IMemoryCache memoryCache;    
    
        public HomeController(IMemoryCache memoryCache)    
        {    
            this.memoryCache = memoryCache;    
        }    
    }    
}

1 Ответ

0 голосов
/ 06 августа 2020

пытается записать журналы в кеш с помощью serilog

Если это действительно требует записи журналов в кеш с использованием Serilog в соответствии со специфическим сценарием c, для этого вы можете попробовать реализовать a настраиваемый LogEventSink , как показано ниже.

public class MyMemoryCacheSink : ILogEventSink
{
    private IMemoryCache memoryCache;

    public MyMemoryCacheSink(IMemoryCache memoryCache)
    {
        this.memoryCache = memoryCache;
    }

    public void Emit(LogEvent logEvent)
    {
        memoryCache.Set("Clog", logEvent.MessageTemplate.Text);

        var log = memoryCache.Get<string>("Clog");
    }
}

public static class MyMemoryCacheSinkExtensions
{
    public static LoggerConfiguration MyMemoryCacheSink(
                this LoggerSinkConfiguration loggerConfiguration, IMemoryCache memoryCache)
    {
        return loggerConfiguration.Sink(new MyMemoryCacheSink(memoryCache));
    }
}

Использовать настраиваемый приемник

private readonly IMemoryCache memoryCache;
public HomeController(IMemoryCache memoryCache)
{
            
    this.memoryCache = memoryCache;

}

public IActionResult Index()
{

    var logger = new ReloadableLogger(cfg => cfg.WriteTo.MyMemoryCacheSink(memoryCache));
    logger.Information("hello world");

Результат теста

введите описание изображения здесь

...