C#文件输出LOG

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web;
using System.Web.UI;

namespace OrderSystem
{
public class writeLog
{
/// <summary>
/// 写入日志文件
/// </summary>
/// <param name="input"></param>
public static void WriteLogFile(string input)
{
///指定日志文件的目录
string fname = "C:\\"+
DateTime.Now.Year + '-' +
DateTime.Now.Month + '-' +
DateTime.Now.Day + "_LogFile"+".txt";

if (!File.Exists(fname))
{
//不存在文件
File.Create(fname).Dispose();//创建该文件
}

/**/
///判断文件是否存在以及是否大于2K
/* if (finfo.Length > 1024 * 1024 * 10)
{
/**/
//文件超过10MB则重命名
/* File.Move(fname, Directory.GetCurrentDirectory() + DateTime.Now.TimeOfDay + "\\LogFile.txt");
//删除该文件
//finfo.Delete();
}*/

using (StreamWriter log = new StreamWriter(fname, true))
{
//FileStream fs = new FileStream(url, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);FileMode.Append

///设置写数据流的起始位置为文件流的末尾
log.BaseStream.Seek(0, SeekOrigin.End);

///写入“Log Entry : ”
log.Write("\n\rLog Entry : ");

///写入当前系统时间并换行
log.Write("{0} {1} \n\r", DateTime.Now.ToLongTimeString(),
DateTime.Now.ToLongDateString());

///写入日志内容并换行
log.Write(input + "\n\r");

//清空缓冲区
log.Flush();
//关闭流
log.Close();
}
}

 

/// <summary>
/// 将异常打印到LOG文件
/// </summary>
/// <param name="ex">异常</param>
/// <param name="LogAddress">日志文件地址</param>
public static void WriteLogTxt(Exception ex, string LogAddress = "")
{
//如果日志文件为空,则默认在Debug目录下新建 YYYY-mm-dd_Log.log文件
if (LogAddress == "")
{
///指定日志文件的目录
LogAddress = "E:\\" +
DateTime.Now.Year + '-' +
DateTime.Now.Month + '-' +
DateTime.Now.Day + "_Log.log";
}

FileInfo finfo = new FileInfo(LogAddress);

if (!finfo.Exists)
{
FileStream fs;
fs = File.Create(LogAddress);
fs.Close();
finfo = new FileInfo(LogAddress);
}

//把异常信息输出到文件
StreamWriter sw = new StreamWriter(LogAddress, true);
sw.WriteLine("当前时间:" + DateTime.Now.ToString());
sw.WriteLine("异常信息:" + ex.Message);
sw.WriteLine("异常对象:" + ex.Source);
sw.WriteLine("调用堆栈:\n" + ex.StackTrace.Trim());
sw.WriteLine("触发方法:" + ex.TargetSite);
sw.WriteLine();
sw.Close();
}

}
}

转载于:https://www.cnblogs.com/tang2016/p/5961143.html

### C# 中的日志输出方法与常用库 在 C# 开发中,日志记录是一个非常重要的环节。通过有效的日志管理工具,开发者能够更好地监控应用状态、排查问题以及优化性能。以下是关于如何在 C# 中实现日志输出的一些常见方法和使用的第三方库。 #### 原生 .NET 日志机制 .NET 提供了一个内置的日志框架 `System.Diagnostics`,可以通过该命名空间下的类来完成基本的日志记录操作。例如: ```csharp using System; using System.Diagnostics; class Program { static void Main() { Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); Trace.AutoFlush = true; Trace.WriteLine("This is an informational message."); Debug.WriteLine("This is a debug-level message."); } } ``` 这种方法简单易用,但对于复杂场景可能显得不够灵活[^4]。 #### 第三方日志库推荐 为了满足更高级别的需求,通常会引入一些成熟的第三方日志库,其中最为流行的有以下几种: 1. **log4net** log4net 是一个基于 Java 的 Log4j 移植到 .NET 平台上的开源日志组件。它支持多种日志级别(如 FATAL, ERROR, WARN, INFO 和 DEBUG),并且允许将日志写入不同目标位置,包括文件、数据库、控制台等。下面是一段典型的配置方式及其使用示例: 配置 XML 文件 (App.config 或 Web.config): ```xml <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="ConsoleAppender"/> </root> </log4net> </configuration> ``` 使用代码: ```csharp using log4net; using log4net.Config; using System.IO; using System.Reflection; public class LoggerExample { private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public LoggerExample() { XmlConfigurator.Configure(new FileInfo("path_to_config_file")); } public void Execute() { _log.Info("Application started"); try { throw new Exception("Test exception"); } catch (Exception ex) { _log.Error("An error occurred", ex); } } } ``` 2. **NLog** NLog 同样是一款强大的日志记录器,提供了丰富的特性集,易于集成至项目之中。其语法简洁明了,适合快速上手。下面是简单的例子展示如何设置 NLog 来打印消息到控制台或者保存成文本档。 安装 NuGet 包后,在项目的根目录创建名为 nlog.config 的文件,并加入如下内容: ```xml <?xml version="1.0" encoding="utf-8"?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target xsi:type="File" name="logfile" fileName="${basedir}/logs/logfile.txt" /> <target xsi:type="Console" name="console" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="logfile, console" /> </rules> </nlog> ``` 接下来编写测试函数验证效果: ```csharp using NLog; internal class SampleClass { private static readonly Logger logger = LogManager.GetCurrentClassLogger(); public void DoWork() { logger.Trace("Entering method..."); logger.Debug("Performing some operation..."); logger.Warn("Something unusual happened but not critical."); logger.Error("Error encountered during processing!"); logger.Fatal("Terrible failure that needs immediate attention!!"); } } ``` 3. **Serilog** Serilog 则以其结构化事件数据处理能力著称,特别适用于微服务架构下分布式系统的追踪分析工作。相比传统字符串拼接形式生成的日志条目来说,采用键值对表达更加直观清晰。 初始化过程大致如下所示: ```csharp var log = new LoggerConfiguration() .WriteTo.File("Logs/myapp-.txt", rollingInterval: RollingInterval.Day) .CreateLogger(); log.Information("Starting up application at {StartTime}", DateTime.Now); ``` 以上列举了几种主流的选择方案,具体选用哪一种取决于实际应用场景和个人偏好等因素考虑决定即可[^5][^6].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值