using HH.WCS.SJML.util; using NLog; using NLog.Config; using NLog.Targets; using System; using System.Collections.Generic; using System.Linq; namespace HH.WCS.Hexafluo { 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 Detail(string title, string content) { Info(title, content); } public static void InDetail(LogPara logPara, string content) { logPara.LogIndex++; Info("入库", logPara.LogType + logPara.LogIndex + ":" + content); } public static void TaskDetail(LogPara logPara, string content) { logPara.LogIndex++; Info("完工回报", logPara.LogType + logPara.LogIndex + ":" + content); } public static void OutDetail(LogPara logPara, string content) { logPara.LogIndex++; Info("出库", logPara.LogType + logPara.LogIndex + ":" + content); } public static void AreaTask(LogPara logPara, string content) { logPara.LogIndex++; Info(logPara.LogType, logPara.LogType + logPara.LogIndex + ":" + content); } public static void Info(string name, string message = "") { //logger.Info(message); ILogger logger = null; ILogger logger2 = null; if (string.IsNullOrEmpty(name)) { name = "INFO"; } 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); logger2 = LogFactory.CreateLogger("infoFile"); logger2.Info(message); } } public static void CompInfo(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("CompInfo"); } } if (logger != null) { logger.Info(message); } } public static void DanInfo(string name, string message) { ILogger logger = null; if (loggers.Keys.Contains(name)) { logger = loggers[name]; } else { logger = LogFactory.CreateLogger(name); } if (logger != null) { logger.Info(message); } } public static void CameraInfo(string name, string message = "") { //logger.Info(message); ILogger logger = null; if (string.IsNullOrEmpty(name)) { name = "INFO"; } 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() { "HosttoagvTask", "HosttoagvCar", "NDC", "MES", "绑定解绑", "重量计算", "物料品质修改", "入库", "入库算法", "出库", "出库算法", "处理自管任务", "更换终点", "更换起点", "执行的SQL", "ERP传参", "完工回报", "任务下发", "给立库下达任务", "立库", "立库任务下达", "发送给MES", "回滚任务服务", "INFO", "Wcs报警信息", "巷道用禁用", "接驳位用禁用", "转运", "钉钉通知", "下发无托盘入库立库任务","调整优先级","确定入库托盘信息","计算AGV时间","出库到接驳位","入库改道","ts切换路线","获取json文件" }; 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 * 20;//每个文件最大20M target.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence; target.ArchiveFileName = @"${basedir}/Logs/" + a + "/{####}.log"; target.FileName = @"${basedir}/Logs/" + a + "/${shortdate}.log";//当前文件路径 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 * 20;//每个文件最大5M infoFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence; infoFileTarget.ArchiveFileName = @"${basedir}/Logs/Info/{####}.log"; infoFileTarget.FileName = @"${basedir}/Logs/Info/${shortdate}.log";//当前文件路径 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, "infoFile");//INFO写在Info文件 //添加target-err var errorFileTarget = new FileTarget(); errorFileTarget.ArchiveAboveSize = 1024 * 1024 * 20;//每个文件最大5M errorFileTarget.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence; errorFileTarget.ArchiveFileName = @"${basedir}/Logs/Error/{####}.log"; errorFileTarget.FileName = @"${basedir}/Logs/Error/${shortdate}.log"; 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; } } }