C#日志类的使用
提示:日志写法与引用的使用
文章目录
- 日志
- 一、日志
- 二、NLOG的基本使用
- 1.引入库
- 2.Nlog代码编写
- 3.log4net使用
- 4.Serilog
- 1.引入
日志
你可以创建自定义的日志记录类来管理应用程序的日志输出。这种日志类通常会封装了底层的日志记录库,提供了一组简洁的方法来记录不同级别的日志消息。
Log4Net:
Log4Net 是 Apache 软件基金会的一个开源项目,提供了强大的、高度可配置的日志记录功能。它可以用于记录到不同的输出目标,如文件、控制台、数据库等。
NLog:
NLog 是一个灵活且强大的日志记录库,允许通过配置文件轻松地更改日志记录策略。它支持多种目标,包括文件、数据库、控制台等。
Serilog:
Serilog 是一个简单且极具扩展性的日志库。它支持结构化日志记录,允许使用自定义的输出格式和目标。Serilog 也能够轻松地与其他库和框架集成。
提示:以下是本篇文章正文内容,下面案例可供参考
一、日志
using System;
using System.IO;
public class Logger
{
//路径
private string files = AppDomain.CurrentDomain.BaseDirectory + "\\log\\" + DateTime.Now.ToString("MMddHHmmssfff") + ".log";
private StreamWriter write;
public Logger()
{
write = new StreamWriter(files,true);
}
public void Log(LogLevel level, string message)
{
// 根据日志级别选择不同的输出方式
switch (level)
{
case LogLevel.Info:
Console.ForegroundColor = ConsoleColor.White;
break;
case LogLevel.Warning:
Console.ForegroundColor = ConsoleColor.Yellow;
break;
case LogLevel.Error:
Console.ForegroundColor = ConsoleColor.Red;
break;
default:
break;
}
//文件写入
string msg = $"{DateTime.Now} [{level.ToString()}]: {message}";
write.WriteLine(msg);
write.Flush();
// 输出日志消息
//Console.WriteLine($"{DateTime.Now} [{level.ToString()}]: {message}");
// 恢复控制台默认颜色
Console.ResetColor();
}
}
public enum LogLevel
{
Info,
Warning,
Error
}
class Program
{
static void Main(string[] args)
{
Logger logger = new Logger();
// 记录不同级别的日志消息
logger.Log(LogLevel.Info, "This is an info message.");
// 记录不同级别的日志消息
logger.Log(LogLevel.Warning, "This is a warning message.");
logger.Log(LogLevel.Error, "This is an error message.");
Console.ReadLine();
}
}
二、NLOG的基本使用
1.引入库
引用nLog。
日志级别 | 严厉 | 典型用途 |
---|---|---|
跟踪 | 最冗长的级别。用于开发,很少在生产中启用。 | 例如,请求有效负载、响应有效负载、开始方法 X 或结束方法 X |
调试 | 从感兴趣的内部事件调试应用程序行为。 | 例如,已执行查询、用户已通过身份验证、会话已过期 |
信息 | 突出显示进度或应用程序生存期事件的信息。 | |
警告 | 有关可恢复的验证问题或临时故障的警告。 | |
错误 | 功能失败或捕获异常的错误。 | |
致命 | 最关键的级别。应用程序即将中止。 |
2.Nlog代码编写
<?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 name="file" xsi:type="File" fileName="logs/${date}.txt" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
static class NLOGHelper
{
//创建实例对象
private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
//创建实例对象,手动命名
//private static readonly NLog.Logger logger1 = NLog.LogManager.GetLogger("MyLogger");
public static void Log(string msg)
{
try
{
// 检查是否启用调试级别日志
if (logger.IsDebugEnabled)
{
logger.Info(msg);
}
}
catch (Exception)
{
throw;
}
}
}
需要配置可以使用配置文件
//创建一个配置文件对象
var config = new NLog.Config.LoggingConfiguration();
//创建日志写入目的地
var logfile = new NLog.Targets.FileTarget("logfile") { FileName = $"logs/{DateTime.Now.ToString("yyyy-MM-dd")}.log" };
//添加日志路由规则
config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
//配置文件生效
LogManager.Configuration = config;
3.log4net使用
a<?xml version="1.0" encoding="utf-8"?>
<log4net>
<!-- 控制台日志配置 -->
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<!-- 日志输出格式 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
</layout>
</appender>
<!-- 文件存储日志配置 -->
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<!-- 保存文件的名称 -->
<file value="logs\log.log" />
<appendToFile value="true" />
<!-- 文件的编码方式 -->
<param name="Encoding" value="UTF-8"/>
<!-- 每个文件的大小 -->
<maximumFileSize value="100KB" />
<!-- 保存文件数量 -->
<maxSizeRollBackups value="2" />
<!-- 日志输出格式 -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level %thread %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
在这里插入代码片
class Program
{
private static readonly ILog log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
log.Debug("Debug 测试.");
Console.ReadLine();
}
}
4.Serilog
1.引入
- 引入Serlog和Serilog.Sinks.Console、Serilog.Sinks.File
LoggerConfiguration 类提供一个流式接口用于构建一个日志记录管道
WriteTo.Console() 将控制台接收器添加到上述管道中
CreateLogger() 组装并返回一个实现ILogger接口的Logger对象
class Program
{
static void Main(string[] args)
{
//配置
Log.Logger = new LoggerConfiguration()
//打印到控制器
.WriteTo.Console()
//生成文件
.WriteTo.File("log.log", rollingInterval: RollingInterval.Day)
//按日期生成日志路径,需要安装nuget: Serilog.Sinks.Map
//.WriteTo.Map(
//i => i.Timestamp.Date,
//(d, b) => { b.File($"logs/{d:yyyyMMdd}/log.txt"); }
//)
.CreateLogger();
// 运行你的应用程序
Log.Information("Serilog demo!");
// 关闭 Serilog 日志记录器
Log.CloseAndFlush();
Console.ReadKey();
}
}