Files
2026-10-12 16:22:04 +08:00

86 lines
5.0 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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="${basedir}/logs/nlog-internal.log">
<!-- 所有服务共用本配置。服务启动时写入 SERVICE_NAME;INSTANCE_ID 区分同服务的多个容器。 -->
<variable name="service" value="${environment:variable=SERVICE_NAME}" />
<variable name="instance" value="${environment:variable=INSTANCE_ID}" />
<variable name="logDirectory" value="${basedir}/logs/${shortdate}" />
<variable name="layout" value="${longdate}|service=${var:service}|instance=${var:instance}|${uppercase:${level}}|${logger}|${message}${onexception:inner= ${exception:format=tostring}}" />
<!-- 日志输出开关:true=开启,false=关闭。保存文件后 NLog 会自动重载。 -->
<variable name="enableDebug" value="true" />
<variable name="enableInfo" value="true" />
<variable name="enableWarn" value="true" />
<variable name="enableError" value="true" />
<variable name="enableCap" value="true" />
<variable name="enableSocket" value="true" />
<variable name="enableFishSpawn" value="true" />
<variable name="enableConsole" value="true" />
<targets async="true">
<target xsi:type="File" name="debugFile" fileName="${var:logDirectory}/${var:service}-${var:instance}-debug.log" layout="${var:layout}" />
<target xsi:type="File" name="infoFile" fileName="${var:logDirectory}/${var:service}-${var:instance}-info.log" layout="${var:layout}" />
<target xsi:type="File" name="warnFile" fileName="${var:logDirectory}/${var:service}-${var:instance}-warn.log" layout="${var:layout}" />
<target xsi:type="File" name="errorFile" fileName="${var:logDirectory}/${var:service}-${var:instance}-error.log" layout="${var:layout}" />
<target xsi:type="File" name="capFile" fileName="${var:logDirectory}/${var:service}-${var:instance}-cap.log" layout="${var:layout}" />
<target xsi:type="File" name="socketFile" fileName="${var:logDirectory}/${var:service}-${var:instance}-socket.log" layout="${var:layout}" />
<target xsi:type="File" name="fishSpawnFile" fileName="${var:logDirectory}/${var:service}-${var:instance}-fishspawn.log" layout="${var:layout}" />
<target xsi:type="Console" name="console" layout="${var:layout}" />
<target xsi:type="Null" name="blackhole" />
</targets>
<rules>
<!-- 屏蔽 ASP.NET Core 自动生成的 API 请求/路由/MVC/CORS 流水日志,仅保留 Warn 及以上。 -->
<logger name="Microsoft.AspNetCore.*" maxlevel="Info" writeTo="blackhole" final="true" />
<!-- CAP 单独输出,避免与普通业务日志混杂。 -->
<logger name="DotNetCore.CAP.*" minlevel="Debug" writeTo="capFile" final="true">
<filters defaultAction="Log">
<when condition="'${var:enableCap}' != 'true'" action="Ignore" />
</filters>
</logger>
<!-- Socket/SignalR 日志单独留档,同时继续进入对应级别文件。 -->
<logger name="*" minlevel="Debug" writeTo="socketFile">
<filters defaultAction="Ignore">
<when condition="'${var:enableSocket}' != 'true'" action="Ignore" />
<when condition="contains('${message:raw=true}', '[Socket]')" action="Log" />
</filters>
</logger>
<logger name="*.Hubs.*" minlevel="Debug" writeTo="socketFile">
<filters defaultAction="Log"><when condition="'${var:enableSocket}' != 'true'" action="Ignore" /></filters>
</logger>
<logger name="*MovementFilter" minlevel="Debug" writeTo="socketFile">
<filters defaultAction="Log"><when condition="'${var:enableSocket}' != 'true'" action="Ignore" /></filters>
</logger>
<!-- 出鱼数据独立留档,不受普通 Info 开关影响。 -->
<logger name="*" minlevel="Info" writeTo="fishSpawnFile">
<filters defaultAction="Ignore">
<when condition="'${var:enableFishSpawn}' != 'true'" action="Ignore" />
<when condition="contains('${message:raw=true}', '[FishSpawnData]')" action="Log" />
</filters>
</logger>
<!-- 四个级别分别输出;Error 文件同时接收 Critical/Fatal。 -->
<logger name="*" level="Debug" writeTo="debugFile">
<filters defaultAction="Log"><when condition="'${var:enableDebug}' != 'true'" action="Ignore" /></filters>
</logger>
<logger name="*" level="Info" writeTo="infoFile">
<filters defaultAction="Log"><when condition="'${var:enableInfo}' != 'true'" action="Ignore" /></filters>
</logger>
<logger name="*" level="Warn" writeTo="warnFile">
<filters defaultAction="Log"><when condition="'${var:enableWarn}' != 'true'" action="Ignore" /></filters>
</logger>
<logger name="*" minlevel="Error" writeTo="errorFile">
<filters defaultAction="Log"><when condition="'${var:enableError}' != 'true'" action="Ignore" /></filters>
</logger>
<logger name="*" minlevel="Info" writeTo="console">
<filters defaultAction="Log"><when condition="'${var:enableConsole}' != 'true'" action="Ignore" /></filters>
</logger>
</rules>
</nlog>