Nlog自定义目录/文件名日志

0x00 前言

上周元旦之前项目要求nlog自定义记录,要区分文件夹/文件名称做区分,这周就来看看。

基于nlog实现自定义目录、文件名(其实就是动态变量传参)

0x01 环境配置

1、xml配置,项目目录下,文件名为nlog.conifg(自动寻找配置,记得修改属性为始终复制)

<?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"
     autoReload="true"
       internalLogLevel="Warn"
       internalLogFile="internal-nlog.txt">
	<!--define various log targets-->
	<targets>
		<!--自定义日志-->
		<target xsi:type="File" name="CustArgsLog" fileName="logs/CustLog/${scopeproperty:item=custArgs1}/${scopeproperty:item=custArgs2}/sync_${scopeproperty:item=custArgs3}.log"
		  layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
	</targets>
	<rules>
		<!--All logs, including from Microsoft-->
		<logger name="CustLog" minlevel="Trace" writeTo="CustArgsLog"/>
	</rules>
</nlog>

2、项目配置

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
	  <TargetFramework>net6.0</TargetFramework>
	  <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NLog" Version="5.2.8" />
  </ItemGroup>

</Project>

0x02 代码编写,测试demo

public static void Main()
{
    var r = Enumerable.Range(1, 10).Select(x => Task.Run(TaskRun)).ToArray();

    Task.WaitAll(r);


    foreach (var item in Enumerable.Range(1, 10))
    {
        TaskRun();
    }
    Console.WriteLine();
    Console.WriteLine($"任务结束=================主线程ID为{Environment.CurrentManagedThreadId}");
}

public static void TaskRun()
{
    Thread.Sleep(1000);
    var log = NLog.LogManager.GetLogger("CustLog");
    var threedId = Environment.CurrentManagedThreadId;
    //线程ID分目录1
    NLog.ScopeContext.PushProperty("custArgs1", $"这是参数1-线程ID为{threedId}");
    //1、2、3的目录2
    NLog.ScopeContext.PushProperty("custArgs2", Random.Shared.Next(1, 4));
    //0或1的文件
    NLog.ScopeContext.PushProperty("custArgs3", DateTime.Now.Ticks % 2);
    log.Info($"测试log内容,打印时间{DateTime.Now}");
    NLog.ScopeContext.Clear();
}

代码运行结果

备注:ScopeContext上下文是基于线程AsyncLocal(可在不同方法作用域增加参数,最终打印时能拿到线程中所有的参数),如果是主线程请用完随手清空;日期类型建议手动转换成字符串;

0x03 参考地址

1、Nlog Context

Context · NLog/NLog Wiki (github.com)

2、Nlog配置文件通用变量

NLog配置文件变量-CSDN博客

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值