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()
和我想要使用的记录器,无论是控制台还是文件记录器,但是当我尝试不记录任何内容时。
答案 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()