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. ...
随机推荐
- Quartz.NET - 教程 8: 调度器监听器
译者注: 目录在这 Quartz.NET 3.x 教程 原文在这 Lesson 8: SchedulerListeners SchedulerListeners 跟 ITriggerListeners ...
- C# 多项目打包时如何将项目引用转为包依赖
项目背景 最近开发一组类库,大约会有五六个项目.一个Core,加上若干面向不同产品的实现库,A/B/C/D...它们都依赖Core. 首先,我想统一版本号,这个容易,通过Directory.Build ...
- Python科学计算系列8—矩阵
1.矩阵构造 代码如下: from sympy import * m1 = Matrix([[1, 2], [2, 0], [3, 4]]) # 构造单位矩阵 m2 = eye(3) # 构造零矩阵 ...
- java基础之成员变量和局部变量区别
1:在类中的位置不同 成员变量:类中,方法外 局部变量:方法中,或者方法声明上(形参) 2:作用范围不一样 成员变量:类中 局部变量:方法中 3:初始化值的不同 成员变量:有默认值 局部变量:没有默认 ...
- dify MCP工具调用
一.概述 前面几篇文章,介绍了Cherry Studio客户端调用MCP,接下来介绍dify如何调用MCP 二.dify插件 需要安装2个插件,分别是:Agent 策略(支持 MCP 工具),MCP ...
- 解决 windows 10 WSL 安装Ubuntu后 屏幕亮度飙至最高 且屏幕亮度无法调节 外接显示器无法显示 的问题
转载请注明出处:博客园 博主Bubgit https://www.cnblogs.com/Bubgit/p/16367937.html 问题现象 自从windows 10推出了 wsl (Window ...
- Tortoise-ORM与FastAPI集成:异步模型定义与实践
title: Tortoise-ORM与FastAPI集成:异步模型定义与实践 date: 2025/04/20 11:38:23 updated: 2025/04/20 11:38:23 autho ...
- 技术-Todo
本文描述下一步调研的技术系统 技术 地址 状态 数据库中间件 https://vitess.io/zh/ Todo
- 太喜欢啦,浏览器中的SQL神器:WhatTheDuck让CSV分析像聊天一样简单!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 基于DuckDB的轻量级Web应用 | 完全浏览器端运行 | 零数据泄露风险 | 支持复杂S ...
- 俩天完美复刻DeepWiki,并且免费开源!
俩天完美复刻DeepWiki,并且免费开源! 大家好!今天非常高兴为大家介绍KoalaWiki项目 - 这是我们团队花费两天时间完美复刻一个免费开源的AI驱动代码知识库系统,可以说是DeepWiki的 ...