C# LoggingHelp 自定义记录日志帮助类
public class LoggingHelper
{
/// <summary>
/// 获取文件路径
/// </summary>
/// <returns></returns>
public static string GetLogFilePath()
{
string log_file_path = OPOConfig.GetValue("Log_File_Path");
if (log_file_path == null)
{
log_file_path = AppDomain.CurrentDomain.BaseDirectory + "\\Content\\Log\\";
}
return log_file_path;
}
/// <summary>
/// 写入日志文件
/// </summary>
/// <param name="logType"></param>
/// <param name="message"></param>
/// <param name="writeType"></param>
/// <param name="logFileName"></param>
public static void WriteLog(string logType, string message, int writeType = 0, string logFileName = "")
{
if (string.IsNullOrWhiteSpace(logFileName))
{
logFileName = DateTime.Now.Date.ToString("yyyyMMdd");
}
string strlogpath = GetLogFilePath() + "\\日志文件" + logFileName+"\\";
if (!Directory.Exists(strlogpath))//判断文件夹是否存在
{
Directory.CreateDirectory(strlogpath); //创建新文件夹
}
try
{
DeleteFile(strlogpath, 30);
DateTime now = DateTime.Now;//现在
string fileName = string.Empty;//文件名
fileName += DateTime.Today.ToString("yyyyMMdd").Replace("/", "").Replace("-", "").Replace("\\", "").Replace(" ", "").Replace(":", "").Replace(":", "") + "_" + DateTime.Now.Hour + ".log";
string fullPath = strlogpath + fileName;
while (IsFileInUse(fullPath))
{
System.Threading.Thread.Sleep(100);
}
using (StreamWriter output = new StreamWriter(fullPath, true, System.Text.Encoding.UTF8))
{
switch (writeType)
{
case 1:
output.WriteLine("\r\n");
output.WriteLine("-------------------开始:-" + now.ToString() + "-------------------------------");
output.WriteLine("类型:" + logType);
output.WriteLine("描述:" + message);
output.Close();
break;
case 2:
output.WriteLine("\r\n");
output.WriteLine("类型:" + logType);
output.WriteLine("描述:" + message);
output.Close();
break;
case 3:
output.WriteLine("类型:" + logType);
output.WriteLine("描述:" + message);
output.WriteLine("-------------------结束:-" + now.ToString() + "-------------------------------");
output.WriteLine("\r\n");
output.Close();
break;
default:
output.WriteLine("\r\n");
output.WriteLine("-------------------开始:-" + now.ToString() + "-------------------------------");
output.WriteLine("类型:" + logType);
output.WriteLine("描述:" + message);
output.WriteLine("-------------------结束:-" + now.ToString() + "-------------------------------");
output.Close();
break;
}
if (writeType == 0)
{
}
else
{
}
}
}
catch (Exception error)
{
WriteLogError(error.Message);//记录日志异常
}
}
private static void WriteLogError(string error)
{
string strlogpath = GetLogFilePath() + "LogError";
string fileName = DateTime.Now.ToString("yyyy-MM-dd") + ".log";
string fullPath = strlogpath + fileName;
if (!Directory.Exists(fullPath))//判断文件夹是否存在
{
Directory.CreateDirectory(fullPath); //创建新文件夹
}
try
{
while (IsFileInUse(fullPath))
{
System.Threading.Thread.Sleep(100);
}
DateTime now = DateTime.Now; //取现在
using (StreamWriter output = new StreamWriter(fullPath, true, System.Text.Encoding.UTF8))
{
output.WriteLine("----------------------------------------------------------------------------------");
output.WriteLine("Begin: " + now.ToString());
output.WriteLine("Type: Log Exception");
output.WriteLine("Description: " + error);
output.WriteLine("End");
output.Close(); //关闭
}
}
catch
{
}
}
/// <summary>
/// 文件是否被占用
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool IsFileInUse(string fileName)
{
bool inUse = true;
FileStream fs = null;
try
{
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read,
FileShare.None);
inUse = false;
}
catch
{
}
finally
{
if (fs != null)
fs.Close();
}
return inUse;//true表示正在使用,false没有使用
}
/// <summary>
/// 删除文件夹
/// </summary>
/// <param name="fileDirect"></param>
/// <param name="saveDay"></param>
private static void DeleteFile(string fileDirect, int saveDay)
{
DateTime nowTime = DateTime.Now;
DirectoryInfo root = new DirectoryInfo(fileDirect);
DirectoryInfo[] dics = root.GetDirectories();//获取文件夹
FileAttributes attr = File.GetAttributes(fileDirect);
if (attr == FileAttributes.Directory)//判断是不是文件夹
{
foreach (DirectoryInfo file in dics)//遍历文件夹
{
TimeSpan t = nowTime - file.CreationTime; //当前时间 减去 文件创建时间
int day = t.Days;
if (day > saveDay) //保存的时间 ; 单位:天
{
Directory.Delete(file.FullName, true); //删除超过时间的文件夹
}
}
}
}
}
C# LoggingHelp 自定义记录日志帮助类的更多相关文章
- Android 自定义Activity基类与TitleBar
我们在开发App的时候有时候碰到多个界面有一个共同点的时候,比如,都有相同的TitleBar,并且TitleBar可以设置显示的文字.TitleBar上的点击事件,如果给每一个Activity都写一遍 ...
- hadoop编程小技巧(5)---自定义输入文件格式类InputFormat
Hadoop代码测试环境:Hadoop2.4 应用:在对数据需要进行一定条件的过滤和简单处理的时候可以使用自定义输入文件格式类. Hadoop内置的输入文件格式类有: 1)FileInputForma ...
- WPF自定义窗口基类
WPF自定义窗口基类时,窗口基类只定义.cs文件,xaml文件不定义.继承自定义窗口的类xaml文件的根节点就不再是<Window>,而是自定义窗口类名(若自定义窗口与继承者不在同一个命名 ...
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- 利用NSUserdefaults来存储自定义的NSObject类及自定义类数组
利用NSUserdefaults来存储自定义的NSObject类及自定义类数组 1.利用NSUserdefaults来存储自定义的NSObject类 利用NSUserdefaults也可以来存储及获取 ...
- 安卓开发37:自定义的HorizontalScrollView类,使其pageScroll的时候焦点不选中
自定义一个HorizontalScrollView类,主要为了让这个HorizontalScrollView不能鼠标点击,不能左右按键,并且没有焦点. public class ImageMoveHo ...
- WPF自学入门(九)WPF自定义窗口基类
今天简单记录一个知识点:WPF自定义窗口基类,常用winform的人知道,winform的窗体继承是很好用的,写一个基础窗体,直接在后台代码改写继承窗体名.但如果是WPF要继承窗体,我个人感觉没有理解 ...
- java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类
package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...
- C#自定义FTP访问类的代码
如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; ...
- va注解应用实例 - Annotation, 自定义注解, 注解类规则【转】
本文介绍了java的自定义注解及注解类编写的规则, 并通过实例来说明下如何使用java的注解. 实例演示了注解在类,构造方法,方法和字段的使用. 可以从这里下载到完成的工程代码: http://dl. ...
随机推荐
- C#多线程编程(二)线程池与TPL
一.直接使用线程的问题 每次都要创建Thread对象,并向操作系统申请创建一个线程,这是需要耗费CPU时间和内存资源的. 无法直接获取线程函数返回值 无法直接捕捉线程函数内发生的异常 使用线程池可以解 ...
- 记一次 .NET某云HIS系统 CPU爆高分析
一:背景 1. 讲故事 年前有位朋友找到我,说他们的系统会偶发性的CPU爆高,有时候是爆高几十秒,有时候高达一分多钟,自己有一点分析基础,但还是没找到原因,让我帮忙看下怎么回事? 二:CPU爆高分析 ...
- 如何使用 MySQL 的 EXPLAIN 语句进行查询分析?
如何使用 MySQL 的 EXPLAIN 语句进行查询分析? EXPLAIN 是 MySQL 提供的分析 SQL 查询执行计划的工具,用于了解查询语句的执行过程,帮助优化查询性能. 1. EXPLAI ...
- 对List进行分页工具类
对List<?>进行分页工具类 package com.soft.mpms.zfream.util; import java.util.List; /** * @ClassName 对Li ...
- AspNetCore 请求产生 FreeSql 所有操作 SQL 日志输出到前端
第一步:定义注入类型 public class CurdAfterLog : IDisposable { public static AsyncLocal<CurdAfterLog> Cu ...
- Dify接入RAGFlow无返回结果
0. 前言 在介绍该问题的解决方法前,先谈一谈最近一段时间使用Dify和RAGFlow的一些感受,希望可以给有需要的人提供一些思路或帮助.需要解决方法的可以直接跳到第4部分. 最近在摸索基于知识库的问 ...
- 【漏洞扫描】Nuclei v3.4.1 下载方法(附快速下载链接)
简介 Nuclei v3.4.1是一款强大的漏洞扫描器,并且拥有社区维护的海量漏洞POC,工具质量十分的高.Nuclei 用于基于模板跨目标发送请求,从而实现零误报并提供对大量主机的快速扫描.Nucl ...
- Python 潮流周刊#101:Rust 开发的 Python 类型检查工具(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- BP算法完整推导 2.0 (上)
前面的笔记已经把 BP算法给推导了, 那4大公式, 核心就是 求偏导数的链式法则, 这篇, 再来跟着大佬来推一波, 目的是为了加深印象. 关于记忆这个话题, 心理学家,其实早已经给出了答案, 最好的记 ...
- Dify 架构全景:从模块设计到部署实践的完整指南
项目概述 Dify 是一个开源的 LLM 应用开发平台,提供直观的界面,结合了AI Agent工作流.RAG 管道.智能体能力.模型管理和可观察性功能等,使用户能够快速从原型转向生产环境.Dify 允 ...