using Newtonsoft.Json;
using ServiceCenter.Extensions;
using ServiceCenter.Redis;
using System.Collections.Concurrent;
using WCS.Core;
namespace ServiceCenter
{
public class LogHub
{
///
/// 日志队列
///
public static ConcurrentQueue Logs = new ConcurrentQueue();
///
/// 发布一条日志记录
///
/// 路径
/// 文件名
/// 内容
public static void Publish(string path, string title, string con)
{
RedisHub.Default.RPush("LogHub", JsonConvert.SerializeObject(new LogModel
{
path = path,
Title = title,
Con = con
}));
}
///
/// 增加一条处理日志
///
/// 文件名
/// 内容
public static void InterfaceProcessLog(string title, string con)
{
Logs.Enqueue(new LogModel
{
path = $"D:\\WCSLogs\\{DateTime.Now.yyyyMMdd()}\\接口处理日志",
Title = $"{title}.txt",
Con = con
});
}
public static void init()
{
while (true)
{
var log = JsonConvert.DeserializeObject(RedisHub.Default.LPop("LogHub"));
try
{
if (log != null)
{
if (!Directory.Exists(log.path)) Directory.CreateDirectory(log.path);
File.AppendAllText(Path.Combine(log.path, log.Title), log.Con);
}
}
catch (Exception ex)
{
File.AppendAllText(Path.Combine($"D:\\WCSLogs\\{DateTime.Now.yyyyMMdd()}\\日志处理进程", "Error.txt"), $"{JsonConvert.SerializeObject(log)}--{ex.Message}--{ex.StackTrace}\n");
}
}
}
}
public class LogModel
{
public string path { get; set; }
public string Title { get; set; }
public string Con { get; set; }
}
}