using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
using Newtonsoft.Json;
|
|
using NLog;
|
using NLog.Config;
|
using NLog.Targets;
|
|
namespace HH.WCS.Mobox3.DSZSH {
|
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 = "") {
|
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 = "") {
|
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}");
|
}
|
}
|
|
#region 自定义方法
|
public static void InfoEx(Exception ex) {
|
Info($"发生了异常:{ex.Message}\n{ex.StackTrace}");
|
}
|
|
public static void InfoApi(string apiName, object model) {
|
Info($"触发API:{apiName} " + JsonConvert.SerializeObject(model), "API");
|
}
|
|
public static void InfoHostToAGV(string taskName, object model) {
|
Info($"AGV任务:{taskName}" + JsonConvert.SerializeObject(model), "HosttoagvTask");
|
}
|
#endregion
|
}
|
|
internal class LogFactory
|
{
|
/// <summary>
|
/// 通过配置文件配置日志
|
/// </summary>
|
static LogFactory() {
|
var loggerNames = new List<string>() { "HosttoagvTask", "HosttoagvCar", "NDC", "杭奥", "PLC", "API", "OPC" };
|
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;
|
}
|
}
|
}
|