如何使用自定义日志记录配置?

时间:2017-11-20 14:56:02

标签: c# logging nlog

using System;
using System.IO;
using NLog;
using NLog.Config;
using NLog.Targets;
using Newtonsoft.Json.Linq;

namespace LoggingExample
{
    class Logging
    {

        static void Logging()
        {

                var config = new LoggingConfiguration();

                var consoleTarget = new ColoredConsoleTarget();
                config.AddTarget("console", consoleTarget);
                var fileTarget = new FileTarget();
                config.AddTarget("file", fileTarget);

                consoleTarget.Layout = "${message}";

                fileTarget.FileName = "C:/log.txt";
                fileTarget.Layout = "${message}";


                consoleTarget.UseDefaultRowHighlightingRules = true;

                string json = File.ReadAllText("config.json");
                JObject jo = JObject.Parse(json);
                string debugLevel = (string) jo.SelectToken("Logging_Properties.LogLevel");

                LogLevel level = TestDebugLevel(debugLevel) ? LogLevel.FromString(debugLevel) : LogLevel.Info;

                LoggingRule rule1 = new LoggingRule("Console", LogLevel.Debug, consoleTarget);
                LoggingRule rule2 = new LoggingRule("File", level, fileTarget);

                config.LoggingRules.Add(rule1);
                config.LoggingRules.Add(rule2);

                LogManager.Configuration = config;



        }

        static bool TestDebugLevel(string level)
        {
            switch (level.ToLower())
            {
                case "info":
                    return true;
                case "debug":
                    return true;
                case "warn":
                    return true;
                case "error":
                    return true;
                case "fatal":
                    return true;
                default:
                    return false;

            }
        }
    }

我的应用程序必须包含一个以编程方式配置的记录器,唯一的问题是我不知道如何使用它。我认为一切都写得正确,但我不知道如何在应用程序中实际调用记录器。我知道我必须使用Logmanager.GetLogger()和我想要使用的记录器,无论是控制台还是文件记录器,但是当我尝试不记录任何内容时。

2 个答案:

答案 0 :(得分:1)

您没有记录任何内容,只是配置NLog。

在这种情况下,您需要在调用Log()之后登录到记录器(这可能在另一个类中)

var appConsoleLogger = LogManager.GetLogger("ConsoleLogger");
appConsoleLogger.Info("info log to console");

var appFileLogger = LogManager.GetLogger("FileLogger");
appFileLogger.Info("info log to file");

PS:你的方法名称有点令人困惑,我认为它应该是“SetupLogging”而不是“Log”

答案 1 :(得分:0)

我认为你错过了一个LogManager.ReconfigExistingLoggers()