首先要重写LoggerFileProvider
public class LoggerFileProvider : ILoggerProvider
{
private readonly string _AppId;
/// <summary>
///
/// </summary>
/// <param name="AppId"></param>
public LoggerFileProvider(string AppId)
{
_AppId = AppId;
}
/// <summary>
///
/// </summary>
/// <param name="categoryName"></param>
/// <returns></returns>
public ILogger CreateLogger(string categoryName)
{
return new Logger(categoryName, _AppId);
}
/// <summary>
///
/// </summary>
public void Dispose()
{
}
/// <summary>
///
/// </summary>
public class Logger : ILogger
{
private readonly string _categoryName;
private readonly string _appid;
/// <summary>
///
/// </summary>
/// <param name="categoryName"></param>
/// <param name="AppId"></param>
public Logger(string categoryName, string AppId)
{
_appid = AppId;
_categoryName = categoryName;
}
/// <summary>
///
/// </summary>
/// <param name="logLevel"></param>
/// <returns></returns>
public bool IsEnabled(LogLevel logLevel)
{
return false;
}
/// <summary>
///
/// </summary>
/// <typeparam name="TState"></typeparam>
/// <param name="logLevel"></param>
/// <param name="eventId"></param>
/// <param name="state"></param>
/// <param name="exception"></param>
/// <param name="formatter"></param>
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
try
{
RecordMsg(logLevel, eventId, state, exception, formatter);
}
catch (Exception ex)
{
RecordMsg(logLevel, eventId, state, ex, formatter);
}
}
/// <summary>
/// 新设置的输出格式
/// </summary>
/// <typeparam name="TState"></typeparam>
/// <param name="logLevel"></param>
/// <param name="eventId"></param>
/// <param name="state"></param>
/// <param name="exception"></param>
/// <param name="formatter"></param>
private void RecordMsg<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
///这里重新定义了格式进行输出。也可以换成写文件的形式,按照自己的需求修改
string msg= $"{ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff")} - {logLevel} - [{_appid}] - {_categoryName}:{formatter(state, exception)}";
Console.WriteLine(msg.Replace("\r"," ").Replace("\n", " "));
}
/// <summary>
///
/// </summary>
/// <typeparam name="TState"></typeparam>
/// <param name="state"></param>
/// <returns></returns>
public IDisposable BeginScope<TState>(TState state)
{
return new NoopDisposable();
}
/// <summary>
///
/// </summary>
private class NoopDisposable : IDisposable
{
public void Dispose()
{
}
}
}
}
然后清除原始的日志输出并且再引用重写后的LoggerFileProvider,否则每次会输出两条日志
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(u => u.ClearProviders().AddProvider(new LoggerFileProvider("MyProgram")));//自定义日志
}