Повторно использовать журнал создать в Main () в других классах - PullRequest
0 голосов
/ 20 мая 2019

Я определяю свой журнал в основном классе следующим образом:

Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Information()
                .Enrich.FromLogContext()
                .WriteTo.File(string.Format("log/log-{0}.txt",DateTime.Now.ToString("yyyy-MM-dd--HH-mm-ss")), outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{Method}) {Message}{NewLine}{Exception}")
                .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{Method}) {Message}{NewLine}{Exception}")
                .CreateLogger();

Но метод Main() моего консольного приложения - не единственное место, где я хотел бы войти. Я хотел бы повторно использовать один и тот же файл журнала для других моих классов, чтобы при каждом запуске приложения создавался только один файл, в который вставлялись все журналы из разных классов для этого конкретного запуска.

Как я могу рассказать классу, например DatabaseController для использования того же журнала, который я определил в Main()?

1 Ответ

0 голосов
/ 20 мая 2019

1. Один из лучших способов избежать использования нескольких файлов журнала и только глобального - объявить Log.Logger в классе, поэтому все методы внутри класса будут использовать один и тот же журнал, вы также можете использовать его из метода вне текущего класса, если вы сделаете его общедоступным

вот пример:

class Program {
    LoggerConfiguration ex = null; \\ or make it public if you want to call the log outside the local class

    void Main(){
        ex = new LoggerConfiguration()
                .MinimumLevel.Information()
                .Enrich.FromLogContext()
                .WriteTo.File(string.Format("log/log-{0}.txt",DateTime.Now.ToString("yyyy-MM-dd--HH-mm-ss")), outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{Method}) {Message}{NewLine}{Exception}")
                .WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{Method}) {Message}{NewLine}{Exception}")
                .CreateLogger();
        Method();
    }

    void Method() {
        ex.WriteTo.File(string.Format("/"));
    }
}

2 - Вы также можете отправить файл журнала методу в качестве параметра.

LoggerConfiguration ex = new LoggerConfiguration();
Method(ex);

И параметр метода должен быть, например,

int Method(LoggerConfiguration ex)
{
    // rest of your code
    return(0);
}
...