У меня очень странное поведение моего веб-приложения 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
и прочее.
Похоже, что после запуска пула настроены некоторые политики, которые не позволяют мне записывать в файловую систему, но я не могу найти где,как.
Спасибо за помощь