1.首先安装log4net安装包
在解决方案资源管理器中右键单击依赖项->管理nuget程序包->浏览 搜索log4net选择后面的安装(本人安装的是2.0.8版本)在弹出来的接受许可证中选择我接受,安装完成后依赖项下面的nuget就会如下所示
在Startup类中添加如下代码
public static ILoggerRepository repository { get; set; }
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
//加载log4net日志配置文件
repository = LogManager.CreateRepository("NETCoreRepository");
Configuration = configuration;
}
新增ReadParamAppender类
public class ReadParamAppender : log4net.Appender.AppenderSkeleton
{
private string _file;
public string File
{
get { return this._file; }
set { _file = value; }
}
private int _maxSizeRollBackups;
public int MaxSizeRollBackups
{
get { return this._maxSizeRollBackups; }
set { _maxSizeRollBackups = value; }
}
private bool _appendToFile = true;
public bool AppendToFile
{
get { return this._appendToFile; }
set { _appendToFile = value; }
}
private string _maximumFileSize;
public string MaximumFileSize
{
get { return this._maximumFileSize; }
set { _maximumFileSize = value; }
}
private string _layoutPattern;
public string LayoutPattern
{
get { return this._layoutPattern; }
set { _layoutPattern = value; }
}
private string _datePattern;
public string DatePattern
{
get { return this._datePattern; }
set { _datePattern = value; }
}
private string _level;
public string Level
{
get { return this._level; }
set { _level = value; }
}
protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
}
}
添加CustomRollingFileLogger类
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace TimingStart.Models
{
public class CustomRollingFileLogger
{
private static readonly ConcurrentDictionary<string, ILog> loggerContainer = new ConcurrentDictionary<string, ILog>();
private static readonly Dictionary<string, ReadParamAppender> appenderContainer = new Dictionary<string, ReadParamAppender>();
private static object lockObj = new object();
//默认配置
private const int MAX_SIZE_ROLL_BACKUPS = 20;
private const string LAYOUT_PATTERN = "%d [%t] %-5p %c - %m%n";
private const string DATE_PATTERN = "yyyyMMdd\".txt\"";
private const string MAXIMUM_FILE_SIZE = "256MB";
private const string LEVEL = "debug";
//读取配置文件并缓存
static CustomRollingFileLogger()
{
IAppender[] appenders = LogManager.GetRepository(Startup.repository.Name).GetAppenders();
for (int i = 0; i < appenders.Length; i++)
{
if (appenders[i] is ReadParamAppender)
{
ReadParamAppender appender = (ReadParamAppender)appenders[i];
if (appender.MaxSizeRollBackups == 0)
{
appender.MaxSizeRollBackups = MAX_SIZE_ROLL_BACKUPS;
}
if (appender.Layout != null && appender.Layout is log4net.Layout.PatternLayout)
{
appender.LayoutPattern = ((log4net.Layout.PatternLayout)appender.Layout).ConversionPattern;
}
if (string.IsNullOrEmpty(appender.LayoutPattern))
{
appender.LayoutPattern = LAYOUT_PATTERN;
}
if (string.IsNullOrEmpty(appender.DatePattern))
{
appender.DatePattern = DATE_PATTERN;
}
if (string.IsNullOrEmpty(appender.MaximumFileSize))
{
appender.MaximumFileSize = MAXIMUM_FILE_SIZE;
}
if (string.IsNullOrEmpty(appender.Level))
{
appender.Level = LEVEL;
}
lock (lockObj)
{
appenderContainer[appenders[i].Name] = appender;
}
}
}
}
public static ILog GetCustomLogger(string loggerName, string category = null, bool additivity = false)//loggerName:文件名,category:目录名
{
return loggerContainer.GetOrAdd(loggerName, delegate (string name)
{
RollingFileAppender newAppender = null;
ReadParamAppender appender = null;
if (appenderContainer.ContainsKey(loggerName))
{
appender = appenderContainer[loggerName];
newAppender = GetNewFileApender(loggerName, string.IsNullOrEmpty(appender.File) ? GetFile(category, loggerName) : appender.File, appender.MaxSizeRollBackups,
appender.AppendToFile, true, appender.MaximumFileSize, RollingFileAppender.RollingMode.Composite, appender.DatePattern, appender.LayoutPattern);
}
else
{
newAppender = GetNewFileApender(loggerName, GetFile(category, loggerName), MAX_SIZE_ROLL_BACKUPS, true, true, MAXIMUM_FILE_SIZE, RollingFileAppender.RollingMode.Composite,
DATE_PATTERN, LAYOUT_PATTERN);
}
log4net.Repository.Hierarchy.Hierarchy repository = (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository(Startup.repository.Name);
Logger logger = repository.LoggerFactory.CreateLogger(repository, loggerName);
logger.Hierarchy = repository;
logger.Parent = repository.Root;
logger.Level = GetLoggerLevel(appender == null ? LEVEL : appender.Level);
logger.Additivity = additivity;
logger.AddAppender(newAppender);
logger.Repository.Configured = true;
return new LogImpl(logger);
});
}
//如果没有指定文件路径则在运行路径下建立 Log\{loggerName}.txt
private static string GetFile(string category, string loggerName)
{
if (string.IsNullOrEmpty(category))
{
return string.Format(@"Log\{0}.txt", loggerName);
}
else
{
return string.Format(@"Log\{0}\{1}.txt", category, loggerName);
}
}
private static Level GetLoggerLevel(string level)
{
if (!string.IsNullOrEmpty(level))
{
switch (level.ToLower().Trim())
{
case "debug":
return Level.Debug;
case "info":
return Level.Info;
case "warn":
return Level.Warn;
case "error":
return Level.Error;
case "fatal":
return Level.Fatal;
}
}
return Level.Debug;
}
private static RollingFileAppender GetNewFileApender(string appenderName, string file, int maxSizeRollBackups, bool appendToFile = true, bool staticLogFileName = false, string maximumFileSize = "5MB", RollingFileAppender.RollingMode rollingMode = RollingFileAppender.RollingMode.Composite, string datePattern = "yyyyMMdd\".txt\"", string layoutPattern = "%d [%t] %-5p %c - %m%n")
{
RollingFileAppender appender = new RollingFileAppender
{
LockingModel = new FileAppender.MinimalLock(),
Name = appenderName,
File = file,
AppendToFile = appendToFile,
MaxSizeRollBackups = maxSizeRollBackups,
MaximumFileSize = maximumFileSize,
StaticLogFileName = staticLogFileName,
RollingStyle = rollingMode,
DatePattern = datePattern,
Encoding = System.Text.UTF8Encoding.UTF8
};
PatternLayout layout = new PatternLayout(layoutPattern);
appender.Layout = layout;
layout.ActivateOptions();
appender.ActivateOptions();
return appender;
}
}
}
利用以下代码默认在Log文件夹内生成日志文件tizhi.txt
public static ILog log = CustomRollingFileLogger.GetCustomLogger("rizhi", "");
log.Info("index页面");
详细请查看原博客:https://blog.youkuaiyun.com/autfish/article/details/51462922