using NLog; using NLog.Common; using NLog.Config; using NLog.Targets; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NTApi.Services { public class LogHelper { public static Dictionary loggers = new Dictionary(); public static void Debug(string message, string name = "") { ILogger logger = null; if (loggers.Keys.Contains(name)) { logger = loggers[name]; } else { logger = LogFactory.CreateLogger(name); if (logger != null) { loggers.Add(name, logger); } else { logger = LogFactory.CreateLogger("console"); } } if (logger != null) { logger.Debug(message); } } public static void Info(string message, string name = "") { //logger.Info(message); ILogger logger = null; if (loggers.Keys.Contains(name)) { logger = loggers[name]; } else { logger = LogFactory.CreateLogger(name); if (logger != null) { loggers.Add(name, logger); } else { logger = LogFactory.CreateLogger("infoFile"); } } if (logger != null) { logger.Info(message); } } public static void Error(string message, Exception ex, string name = "") { //logger.Error(ex, message); ILogger logger = null; if (loggers.Keys.Contains(name)) { logger = loggers[name]; } else { logger = LogFactory.CreateLogger(name); if (logger != null) { loggers.Add(name, logger); } else { logger = LogFactory.CreateLogger("errorFile"); } } if (logger != null) { logger.Error($"{message}{ex.StackTrace}"); } } } internal class LogFactory { /// /// 通过配置文件配置日志 /// static LogFactory() { var loggerNames = new List() { "ThreadHelperLog","TcpHelperLog","WebApiLog","WebService","PlcHelperLog","DataBaseLog","HosttoagvTask", "HosttoagvCar", "NDC", "ThirdSystemLog", "MoboxTask"}; LogManager.Configuration = DefaultConfig(loggerNames); } public static ILogger CreateLogger(string name) { var logger = LogManager.GetLogger(name); return logger; } public static LoggingConfiguration DefaultConfig(List loggerNames) { var config = new LoggingConfiguration(); loggerNames.ForEach(a => { var target = new FileTarget(); target.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M target.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence; target.ArchiveFileName = @"${basedir}/Logs/" + a + "/{####}.txt"; target.FileName = @"${basedir}/Logs/" + a + "/${shortdate}.txt";//当前文件路径 target.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"; config.AddTarget(a, target); config.AddRuleForOneLevel(LogLevel.Info, target, a); }); // 添加target-console var consoleTarget = new ColoredConsoleTarget(); consoleTarget.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"; config.AddTarget("console", consoleTarget); config.AddRule(LogLevel.Debug, LogLevel.Fatal, consoleTarget); //添加target-info var infoFileTarget = new FileTarget(); infoFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M infoFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence; infoFileTarget.ArchiveFileName = @"${basedir}/Logs/Info/{####}.txt"; infoFileTarget.FileName = @"${basedir}/Logs/Info/${shortdate}.txt";//当前文件路径 infoFileTarget.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"; config.AddTarget("infoFile", infoFileTarget); config.AddRuleForOneLevel(LogLevel.Info, infoFileTarget);//INFO写在Info文件 //添加target-err var errorFileTarget = new FileTarget(); errorFileTarget.ArchiveAboveSize = 1024 * 1024 * 5;//每个文件最大5M errorFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence; errorFileTarget.ArchiveFileName = @"${basedir}/Logs/Error/{####}.txt"; errorFileTarget.FileName = @"${basedir}/Logs/Error/${shortdate}.txt"; errorFileTarget.Layout = @"${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"; config.AddTarget("errorFile", errorFileTarget); config.AddRule(LogLevel.Error, LogLevel.Fatal, errorFileTarget); return config; } } }