1

「appname_yyyyMMdd.log」というログ ファイルに書き込むプログラムがあります。ここで、appname はアプリの名前で、yyyyMMdd は現在の日付です。サンプルのログ ファイル名は "loglistener_20110615.log" です。とにかく、私のアプリはログ ファイルを正常に作成し、計画どおりに更新します。ただし、日付が変わると、アプリは何もログに記録せず、新しいファイルも作成しません。つまり、今日は 6 月 15 日なので、今夜の深夜以降に「loglistener_20110616.log」というファイルを作成する必要があり、その新しいファイルに引き続きログを記録する必要があります。

コードの抜粋は次のとおりです。

public static void LogInfo(string format, params object[] args)
{
    lock (_logLock)
    {
        using (StreamWriter sw = File.AppendText(GetLogPath()))
        {
            sw.WriteLine(GetTimeStamp() + String.Format(format, args));
        }
    }
}

private static string GetLogPath()
{
    string appName = "loglistener";
    string today = DateTime.Today.ToString("yyyyMMdd");
    string fileName = appName + "_" + today + ".log";
    string fullLogPath = AppDomain.CurrentDomain.BaseDirectory + fileName;

    return fullLogPath;
}

この同様の質問を確認しましたが、その質問は別のシナリオを説明しています (適用できない修正を含む)。

更新 - グーグル社員がこのページにたどり着いた場合に備えて、後でこれとはまったく別の原因を発見しました。私のログには、電子メール リスニング サービスからの情報が記録されています。サービス自体には、30 分後にタイムアウトするという問題がありました。したがって、私の問題は CreateText / AppendText ではありませんでした... 私の問題は、ログに記録するものがないことでした。非常に迷惑ですが、他の人がこの質問/回答に惑わされないことを願っています。

4

1 に答える 1

1

最初にファイルが存在することを確認する必要があります。

File.AppendTextドキュメントから

型: System.IO.StreamWriter UTF-8 でエンコードされたテキストを既存のファイルに追加する StreamWriter。

public static void LogInfo(string format, params object[] args)
{
    lock (_logLock)
    {
        using (StreamWriter sw = File.Exists(GetLogPath) ? File.AppendText(GetLogPath()) : File.CreateText(GetLogPath())
        {
            sw.WriteLine(GetTimeStamp() + String.Format(format, args));
        }
    }

}

代わりにそれを試してください

コメントを見て、ドキュメントを読み直した後。

File.AppendText

ファイルの存在に関係なく、常に機能するはずです。

于 2011-06-15T18:26:47.287 に答える