1

Ninject と Log4Net を使用するコンソール アプリケーション プロジェクトがあります。

私のマシンでアプリを実行すると、ログは正常に機能しています。本番サーバーでアプリを実行すると、ログは正常に機能します。他のユーザーによって実行されているように設定されている TaskScheduller タスクを介してプログラムを実行すると、どのアペンダーからもログ出力が得られません。RollingFileAppender、SmtpAppender、および AdoNetAppender を使用しています。奇妙なことに、プログラムは正常に実行されていますが、何もログに記録されません。

ローカルで実行するとアプリが動作するため、log4net の構成は問題ないと思います。

プログラムのメイン メソッドでロガーを解決し、必要に応じてコンストラクター パラメーターを介して挿入します。これは、アプリのメイン メソッドでロガーを取得する方法です。

XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));

var kernel = new StandardKernel();
var loggerFactory = kernel.Get<Log4NetLoggerFactory>();
ILogger logger = loggerFactory.GetCurrentClassLogger();

logger.Info(" Test ");

ヒント、ポインター、または何か....他に何を試すべきかわからないため。

4

1 に答える 1

0

拡張子は通常、次のように使用されます。

public class MyClass
{
    private readonly ILogger log;

    public MyClass(ILogger log)
    {
        this.log = log;
        log.Info("Created MyClass");
    }
}

XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));
using (IKernel kernel = new StandardKernel())
{
    kernel.Bind<MyClass>().ToSelf();
    kernel.Get<MyClass>(); // will cause the log message to print
}

ILoggerをクラスに注入することについては、Ninject に任せてください。コンテキストがないため、カーネルを宣言した同じ場所ILoggerから をリクエストすることはできません。IKernel

ただし、これを行うことができます:

ILogger log = new Log4NetLoggerFactory().GetCurrentClassLogger();
log.Info("Test");
于 2013-03-07T13:07:45.493 に答える