在其他类中重复使用Main()中的日志创建

时间:2019-05-20 12:25:44

标签: c# visual-studio logging serilog

我通过以下方式在主类中定义日志:

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 :(得分:0)

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);
}