杨前锦
2025-07-01 a93b0e99036c24b9bd58c79bf5e7364b1ba28bae
HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/util/LogHelper.cs
New file
@@ -0,0 +1,146 @@
using NLog;
using NLog.Common;
using NLog.Config;
using NLog.Targets;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WCS.Mobox3.FJJT
{
    public class LogHelper
    {
        public static Dictionary<string, ILogger> loggers = new Dictionary<string, ILogger>();
        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
    {
        /// <summary>
        /// 通过配置文件配置日志
        /// </summary>
        static LogFactory() {
            var loggerNames = new List<string>() { "HosttoagvTask", "HosttoagvCar", "AGV", "WMS" ,"Mobox","TCP" };
            LogManager.Configuration = DefaultConfig(loggerNames);
        }
        public static ILogger CreateLogger(string name) {
            var logger = LogManager.GetLogger(name);
            return logger;
        }
        public static LoggingConfiguration DefaultConfig(List<string> 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;
        }
    }
}