Частичное ведение журнала в файловой системе на IIS в ASP.NET C # - PullRequest
0 голосов
/ 09 июня 2018

У меня очень странное поведение моего веб-приложения ASP.NET в .NET 4.6.1 с использованием C #.Когда я записываю информацию в файловую систему на IIS, кажется, она не работает должным образом.В среде VS все работает нормально, и файл журнала выглядит так, как ожидалось.

Я использую для настройки своей среды и собственной системы ведения журналов в обработчике событий global.asax Application_Start при запуске apppool.

Я инициализирую свой файл журнала как \ location \ myapp20180606.log и записываю пару строк, таких как «запуск приложения», «версия бла бла»

Странно, что я использую тот же способзапишите эти две строки в global.asax и в стандартный журнал на всех других страницах.

В среде VS я вижу, что полный файл журнала заполнен.

После публикации в IISфайл журнала содержит только две строки глобального asax, без подсказки всех остальных строк.

Это код, надеясь, что что-то не так, я не видел

public void Log(string msg, logLevel level = logLevel.Debug)
{
    if (string.IsNullOrWhiteSpace(msg))  
        return;

    string now = String.Format(@"{0:hh:mm:ss:sss}", DateTime.Now);

    if (string.IsNullOrEmpty(UserName)) 
        UserName = "SYSTEM";
    if (string.IsNullOrEmpty(Application)) 
        Application = "*unknow app*";

    string lvl = "";

    switch (level)
    {
            case logLevel.Action: lvl = "ACT"; break;
            case logLevel.Debug: lvl = "DBG"; break;
            case logLevel.Info: lvl = "INF"; break;
            case logLevel.Error: lvl = "ERR"; break;
            case logLevel.Fatal: lvl = "FTL"; break;
            case logLevel.Warning: lvl = "WAR"; break;
    }

    string line = now + "|" + UserName + "|" + Application + "|" + lvl + "|" + msg;

    if(FileValid)  
        AppendToFile(LogFile, line);
}

public static bool AppendToFile(string nomeFile, string testo, bool addNewline = true, bool deletefirst = false)
{
        try
        {
            if (nomeFile == "") return false;
            StreamWriter fs;

            if (!File.Exists(nomeFile))
            {
                string cartella = Path.GetDirectoryName(nomeFile);

                if (cartella != null && !Directory.Exists(cartella))
                    Directory.CreateDirectory(cartella);

                fs = new StreamWriter(nomeFile, false);
            }
            else
            {
                if (deletefirst)
                    File.Delete(nomeFile);

                fs = new StreamWriter(nomeFile, true);
            }

            if (addNewline)
                fs.WriteLine(testo);
            else
                fs.Write(testo);

            fs.Flush();
            fs.Close();
            fs.Dispose();

            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }
}

Вglobal.asax

LogFile = file + "_" + String.Format(@"{0:yyyyMMdd}", DateTime.Now) + ".log";

string line = "Ora|UserName|Application|Severita|Messaggio";
FileValid = AppendToFile(LogFile, line);

и где бы то ни было в приложении

log("test msg");

Происходит следующее: в среде Visual Studio я вижу полный сгенерированный журнал.

После публикации в IIS я вижу толькодве строки, сгенерированные в global.asax и прочее.

Похоже, что после запуска пула настроены некоторые политики, которые не позволяют мне записывать в файловую систему, но я не могу найти где,как.

Спасибо за помощь

...