using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Core.Helper;
|
|
namespace WIDESEAWCS_Core.LogHelper
|
{
|
public class QuartzLogger
|
{
|
static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim();
|
static string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Log\\{DateTime.Now.ToString("yyyy-MM-dd")}");
|
|
public static void WriteLogToFile(string fileName, string log)
|
{
|
try
|
{
|
// 进入写锁
|
LogWriteLock.EnterWriteLock();
|
|
// 如果文件夹不存在,则创建文件夹
|
if (!Directory.Exists(folderPath))
|
{
|
Directory.CreateDirectory(folderPath);
|
}
|
// 获取日志文件路径
|
string logFilePath = Path.Combine(folderPath, GetLastAccessFileName(fileName));
|
// 获取当前时间
|
DateTime now = DateTime.Now;
|
// 构造日志内容
|
string logContent = $"【{now}】{Environment.NewLine}{log}";
|
|
// 将日志内容追加到日志文件中
|
File.AppendAllText(logFilePath, logContent);
|
}
|
catch { }
|
finally
|
{
|
// 退出写锁
|
LogWriteLock.ExitWriteLock();
|
}
|
}
|
static int size = 10 * 1024 * 1024;
|
static string ext = ".log";
|
private static string GetLogFilePath(string folderPath, string fileName)
|
{
|
// 获取指定文件夹下的所有文件
|
var allFiles = new DirectoryInfo(folderPath);
|
// 获取符合条件的文件,按文件名降序排列
|
var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(fileName.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).OrderByDescending(d => d.Name).ToList();
|
|
FileInfo? file = selectFiles.FirstOrDefault();
|
// 如果有符合条件的文件,返回第一个文件的完整路径
|
if (file != null)
|
{
|
return file.FullName;
|
}
|
|
// 如果没有符合条件的文件,返回一个新的文件路径,文件名为原文件名加上当前时间
|
return Path.Combine(folderPath, $@"{fileName}_{DateTime.Now.ToString("HH-mm-ss")}.log");
|
}
|
|
private static string GetLastAccessFileName(string fileName)
|
{
|
foreach (var m in GetExistLogFileNames(fileName))
|
{
|
FileInfo fileInfo = new FileInfo(m);
|
if (fileInfo.Length < size)
|
{
|
return m;
|
}
|
}
|
|
// 返回一个新的默认当前时间的日志名称
|
return $@"{fileName}_{DateTime.Now.ToString("HH-mm-ss")}.log";
|
}
|
|
public static string[] GetExistLogFileNames(string fileName)
|
{
|
string[] fileNames = Directory.GetFiles(folderPath, fileName + "*.log");
|
return fileNames;
|
}
|
}
|
}
|