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

C#如何实现多项目共用独立控制台Logger(PokeLogger)

实现跨项目统一控制台日志工具PokeLogger

核心调整:将PokeLogger改为类库项目

控制台项目是独立可执行程序,无法被其他项目直接引用调用。直接把PokeLogger项目类型改成类库(Class Library),这样其他4个项目都能添加对它的引用。

实现全局统一日志类

在PokeLogger类库中创建静态日志类,封装控制台初始化和日志输出逻辑,确保所有项目共用同一个控制台窗口:

using System;
using System.Runtime.InteropServices;

public static class PokeLogger
{
    // 调用Windows API创建独立控制台窗口
    [DllImport("kernel32.dll")]
    private static extern bool AllocConsole();

    private static bool _isInitialized = false;

    // 初始化日志控制台(全局只需调用一次)
    public static void Initialize()
    {
        if (!_isInitialized)
        {
            AllocConsole();
            Console.Title = "宝可梦战斗日志";
            _isInitialized = true;
        }
    }

    // 基础日志输出方法
    public static void WriteLine(string message)
    {
        if (!_isInitialized) Initialize();
        Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {message}");
    }

    // 扩展日志级别(可选)
    public static void Info(string message) => WriteLine($"[INFO] {message}");
    public static void Error(string message) => WriteLine($"[ERROR] {message}");
}

在其他项目中调用日志工具

  1. 在解决方案的其他4个项目中,右键「添加引用」,选择PokeLogger类库项目。
  2. 在项目启动时(比如主GUI项目的入口)初始化一次日志控制台:
PokeLogger.Initialize();
  1. 战斗场景中直接调用日志输出:
Opponent.PickSlot(getAttack, getDamage);
Opponent.UseAttack();
PokeLogger.Info($"对手使用了{getAttack.Name},造成了{getDamage.DamageOutput}点伤害!");

关键说明

  • 用AllocConsole创建的独立控制台窗口,不会和其他项目的默认控制台冲突,所有日志都会输出到这个统一窗口。
  • 静态类设计确保全局只有一个日志实例,避免重复创建控制台窗口。
  • 如果需要跨平台支持(非Windows),可以去掉AllocConsole逻辑,让主项目启动控制台,类库直接复用主控制台输出即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:45:35