You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.0 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace GummingCommon
{
/// <summary>
/// this is debug class,not used
/// </summary>
public class MonitorLog
{
private static StringBuilder logContent = new StringBuilder();
/// <summary>
/// 防止并发对象
/// </summary>
private static Object lockobj = new Object();
private static DateTime lastTime = DateTime.Now;
/// <summary>
///
/// </summary>
/// <param name="exception"></param>
/// <returns></returns>
public static bool WriteLog(string log)
{
bool returnValue;
double ticket = DateTime.Now.Subtract(lastTime).TotalMilliseconds;
logContent.AppendLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss.fff") + " - " + ticket + " " + log);
lastTime = DateTime.Now;
returnValue = WriteLog();
return returnValue;
}
/// <summary>
/// 产生文件名
/// </summary>
/// <returns></returns>
private static string GenerateFileName()
{
string path = AppDomain.CurrentDomain.BaseDirectory + @"log\debug\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
return path + "Monitor" + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + " " + System.Guid.NewGuid().ToString() + ".txt";
}
public static int maxFlushSize = 1000000;
/// <summary>
/// 记录监控日志
/// </summary>
/// <param name="logContext">日志内容</param>
/// <returns></returns>
public static bool WriteLog()
{
bool returnValue = true;
lock (logContent) //防止并发
{
if (logContent.Length >= maxFlushSize)
{
GC.Collect();//强制垃圾回收
int writtenSize = FlushLog(); //将监控日志写入文件
if (writtenSize > 0)
{
logContent.Clear();
}
else if (writtenSize == -1) //写入日志失败
{
returnValue = false;
}
}
}
return returnValue;
}
public static int FlushLog()
{
int returnValue = -1;
try
{
if (logContent.Length > 0)
{
StreamWriter sw = File.CreateText(GenerateFileName());
returnValue = logContent.Length;
sw.Write(logContent.ToString(0, returnValue));
sw.Close();
logContent.Clear();
}
}
catch
{
returnValue = -1;
}
return returnValue;
}
}
}