在.Net库项目

时间:2015-06-17 22:36:52

标签: logging nlog

我有类库(我将分发),它有一个日志追加器,可以将一些指标写入特定位置。我在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;

首先,在我计划分发的图书馆项目中激活日志管理器是个好主意吗?我正在这样做,因为我的库需要将数据记录到文件中,消费应用程序不应该关闭它

如果消费应用程序使用相同的日志记录库,并且它将我的配置替换为其实现,那么它是否会覆盖我在库中定义的规则?我想确保库继续将数据记录到文件中。

1 个答案:

答案 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!");