You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于命令行参数的log4net多文件夹日志配置需求

看来你需要实现一个按州代码隔离日志、同时保证单州单实例的应用,我给你整理一套完整的实现方案,结合你提到的string.Format来配置:

完整实现步骤

1. 解析命令行参数获取州代码

首先要确保能正确拿到传入的州代码,并且做基础校验:

string[] args = Environment.GetCommandLineArgs();
// 第一个参数是程序自身路径,所以需要至少2个参数才有效
if (args.Length < 2)
{
    Console.WriteLine("请传入州代码作为命令行参数,例如:MyApp.exe WI");
    Environment.Exit(1);
}
// 统一转大写,避免WI/wi这类大小写差异导致的文件夹不一致
string stateCode = args[1].Trim().ToUpper();

2. 创建州代码对应的日志文件夹

用string.Format拼接路径,再自动创建文件夹(不存在则创建,存在则无操作):

// 用string.Format格式化日志目录路径
string logRootDir = @"C:\MyAppLogs";
string stateLogDir = string.Format(@"{0}\{1}", logRootDir, stateCode);

// 自动创建文件夹,无需判断是否存在
Directory.CreateDirectory(stateLogDir);

3. 保证同一州仅一个实例运行

使用**互斥锁(Mutex)**实现跨进程的单实例控制,锁名绑定州代码确保唯一性:

// 用州代码作为互斥锁的唯一标识,Global前缀确保跨会话生效
using (Mutex stateMutex = new Mutex(true, $"Global\\MyApp_SingleInstance_{stateCode}", out bool isNewInstance))
{
    if (!isNewInstance)
    {
        Console.WriteLine($"州代码 {stateCode} 的应用实例已经在运行,请勿重复启动!");
        Environment.Exit(1);
    }

    // 初始化日志到目标文件夹
    SetupLogging(stateLogDir);

    // 这里写你的应用核心业务逻辑
    Console.WriteLine($"应用启动成功!州代码:{stateCode},日志目录:{stateLogDir}");
    Console.ReadLine(); // 保持进程运行,实际场景可替换为服务循环
}

4. 日志配置示例(结合string.Format)

以常用的NLog为例,展示如何用string.Format配置日志文件路径:

private static void SetupLogging(string logDir)
{
    var logConfig = new LoggingConfiguration();
    // 用string.Format指定日志文件的完整路径
    var fileTarget = new FileTarget("stateLogFile")
    {
        FileName = string.Format(@"{0}\app_{1}.log", logDir, DateTime.Now.ToString("yyyyMMdd")),
        Layout = "${longdate} | ${level} | ${message}"
    };
    logConfig.AddRule(LogLevel.Info, LogLevel.Fatal, fileTarget);
    LogManager.Configuration = logConfig;
}

如果是使用配置文件(如nlog.config),也可以直接通过命令行参数变量实现:

<targets>
    <target name="stateLog" xsi:type="File" 
        fileName="${basedir}/${commandline:index=1:uppercase=true}/app_${date:format=yyyyMMdd}.log"
        layout="${longdate} | ${level} | ${message}" />
</targets>

内容的提问来源于stack exchange,提问作者user441521

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:23:07