我有类库(我将分发),它有一个日志追加器,可以将一些指标写入特定位置。我在csharp文件中配置了appender
var config = new LoggingConfiguration();
const string layout = @"${longdate}|${level:uppercase=true}(${threadid})|${logger}|${message}";
//File appender
var fileTarget = new FileTarget
{
Layout = layout,
FileName = "${basedir}/logs/Desktop.Log",
MaxArchiveFiles = 5,
ArchiveAboveSize = 5000000
};
config.AddTarget("file", fileTarget);
var fileRule = new LoggingRule("*", LogLevel.Debug, fileTarget);
config.LoggingRules.Add(fileRule);
//Activate
LogManager.Configuration = config;
首先,在我计划分发的图书馆项目中激活日志管理器是个好主意吗?我正在这样做,因为我的库需要将数据记录到文件中,消费应用程序不应该关闭它
如果消费应用程序使用相同的日志记录库,并且它将我的配置替换为其实现,那么它是否会覆盖我在库中定义的规则?我想确保库继续将数据记录到文件中。
答案 0 :(得分:1)
我最终使用了一个LogFactory来保护我的库的日志配置不会被消费的应用程序覆盖
以下是我创建LogFactory实例的方法
class NLogManager
{
public static readonly LogFactory Instance = new LogFactory(GetConfig());
private static LoggingConfiguration GetConfig()
{
var config = new LoggingConfiguration();
const string layout = @"${longdate}|${level:uppercase=true}(${threadid})|${logger}|${message}";
//Console appender
var consoleTarget = new ColoredConsoleTarget
{
Layout = layout,
UseDefaultRowHighlightingRules = true
};
config.AddTarget("PPH.ConsoleTarget", consoleTarget);
var consoleRule = new LoggingRule("*", LogLevel.Debug, consoleTarget);
config.LoggingRules.Add(consoleRule);
return config;
}
我通过在日志管理器上调用Instance方法来调用记录器
var logger = Instance.GetLogger(component);
logger.debug("hello world!");