using System;
using System.Collections.Generic;
using System.IO;
namespace GFramework.Core.logging;
///
/// 日志配置类,用于配置日志记录器的行为
///
public sealed class LogConfig
{
///
/// 获取或设置默认的最小日志级别(默认为Info)
///
public LogLevel DefaultMinLevel { get; set; } = LogLevel.Info;
///
/// 获取或设置是否启用控制台输出(默认为true)
///
public bool EnableConsole { get; set; } = true;
///
/// 获取或设置是否使用彩色输出(默认为true)
///
public bool UseColors { get; set; } = true;
///
/// 获取或设置是否启用文件输出(默认为false)
///
public bool EnableFile { get; set; } = false;
///
/// 获取或设置日志文件路径(当EnableFile为true时使用)
///
public string? LogFilePath { get; set; }
///
/// 取特定类别的日志级别配置
///
private readonly Dictionary _categoryLevels = new();
///
/// 设置特定类别的日志级别
///
/// 日志类别
/// 日志级别
public void SetCategoryLevel(string category, LogLevel level)
{
_categoryLevels[category] = level;
}
///
/// 获取类别的日志级别,如果没有特定配置则返回默认级别
///
/// 日志类别
/// 日志级别
public LogLevel GetCategoryLevel(string? category)
{
if (category != null && _categoryLevels.TryGetValue(category, out var level))
{
return level;
}
return DefaultMinLevel;
}
///
/// 创建控制台日志记录器
///
/// 日志类别
/// 日志记录器实例
public ILog CreateConsoleLogger(string? category = null)
{
var level = GetCategoryLevel(category);
return new ConsoleLogger(category, level, null, UseColors);
}
///
/// 创建文件日志记录器
///
/// 日志类别
/// 日志记录器实例
public ILog CreateFileLogger(string? category = null)
{
if (!EnableFile || string.IsNullOrEmpty(LogFilePath))
return new NullLogger();
try
{
var level = GetCategoryLevel(category);
var directory = Path.GetDirectoryName(LogFilePath);
if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
var writer = new StreamWriter(LogFilePath, append: true);
return new ConsoleLogger(category, level, writer, useColors: false);
}
catch
{
// 如果创建文件失败,返回空日志记录器
return new NullLogger();
}
}
}