using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB;
using WIDESEA_Core.Helper;
using WIDESEA_Core.HttpContextUser;
using WIDESEA_Core.Seed;
namespace WIDESEA_Core.LogHelper
{
public class Logger
{
///
/// 写入调试日志
///
///
///
public void WriteDebug(string fileName, string msg)
{
if (AppSettings.Get(new string[] { "LogDeubgEnable" }).ObjToBool())
{
StringBuilder builder = new StringBuilder(msg);
builder.Append(Environment.NewLine);
builder.Append(Environment.NewLine);
WriteLogToFile($"Debug_{fileName}", builder.ToString());
}
}
///
/// 写入信息日志
///
///
///
public void WriteInfo(string fileName, string msg)
{
StringBuilder builder = new StringBuilder(msg);
builder.Append(Environment.NewLine);
builder.Append(Environment.NewLine);
WriteLogToFile($"Info_{fileName}", builder.ToString());
}
///
/// 写入错误日志
///
///
///
///
public void WriteError(string fileName, string msg, Exception ex)
{
StringBuilder builder = new StringBuilder(msg);
builder.Append(Environment.NewLine);
builder.Append("错误信息:");
builder.Append(ex.Message);
builder.Append(Environment.NewLine);
builder.Append("错误源:");
builder.Append(ex.Source);
builder.Append(Environment.NewLine);
builder.Append("错误堆栈:");
builder.Append(ex.StackTrace);
builder.Append(Environment.NewLine);
builder.Append("错误类型:");
builder.Append(ex.GetType().ToString());
builder.Append(Environment.NewLine);
builder.Append("错误方法:");
builder.Append(ex.TargetSite?.ToString());
builder.Append(Environment.NewLine);
builder.Append(Environment.NewLine);
WriteLogToFile($"Error_{fileName}", builder.ToString());
}
ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim();
string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Log\\{DateTime.Now.ToString("yyyy-MM-dd")}");
private 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();
}
}
int size = 10 * 1024 * 1024;
string ext = ".log";
private 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 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";
}
private string[] GetExistLogFileNames(string fileName)
{
string[] fileNames = Directory.GetFiles(folderPath, fileName + "*.log");
return fileNames;
}
}
}