как выводить просмотры страниц в текстовый документ

#asp.net #logging

#asp.net #ведение журнала

Вопрос:

У меня есть домашняя страница в формате HTML. Я хочу иметь возможность выводить в текстовый документ на сервере каждый раз, когда пользователь просматривает страницу.

Я хочу вывести IP-адреса, страницу и дату / время, кто-нибудь знает простой способ сделать это?

Если это должно быть сделано не в html, я бы предпочел использовать ASP.

Комментарии:

1. Классический ASP или ASP.NET ? У вас есть база данных или вам нужен просто текстовый файл?

2. asp.net и на данный момент я думаю, что проще просто в текстовом файле, в будущем я обращусь к базе данных, а затем импортирую ее

3. Хорошо — второй вопрос, извините, забыл задать раньше: есть ли возможность переименовать HTML-файл, чтобы он имел .aspx расширение, или создать новую страницу, а затем перенаправить на нее HTML-страницу?

4. Приветствую, смотрите мой ответ — также обновлены теги вопросов, чтобы лучше отразить это.

Ответ №1:

Сначала переименуйте страницу, чтобы она имела .aspx расширение, и добавьте код за файлом.

Во-вторых, добавьте этот метод в код, лежащий в основе:

 private void WriteLog()
{
    string currentFileName = Path.GetFileNameWithoutExtension(Request.FilePath);
    string logFileName = string.Format("{0}_{1}.log.txt", currentFileName, DateTime.Now.ToString("ddMMyyyy"));
    string logFilePath = Server.MapPath(logFileName);
    string IP = Request.ServerVariables["REMOTE_ADDR"];
    string logMessage = string.Format("[{0}] [IP: {1}] [Page: {2}]", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), IP, Request.FilePath);
    File.AppendAllLines(logFilePath, new string[] { logMessage });
}
  

И, наконец, просто вызовите вышеупомянутый метод из Page_Load события, например

 protected void Page_Load(object sender, EventArgs e)
{
    WriteLog();
}
  

Это создаст текстовый файл с тем же именем, что и .aspx (в том же расположении) плюс текущую дату, чтобы избежать засорения одного и того же файла миллионами строк, и добавит одну строку для каждого просмотра.

Редактировать: это код .NET 4.0, поэтому вам нужно будет определить это как целевую платформу как в Visual Studio, если вы ее используете, так и в конфигурации IIS. web.config Студия должна обновить его, и на случай, если вы им не пользуетесь, вот дополнительные строки:

 <system.web>
  <httpRuntime requestValidationMode="2.0" />
  <compilation debug="true" targetFramework="4.0" />
</system.web>
  

Комментарии:

1. Я получаю следующую ошибку … ‘System.IO.File’ не содержит определения для ‘AppendAllLines’

2. хммм, вы знаете, как должен выглядеть web.conf для версии 4.0?

Ответ №2:

Как сказал @Alp, PHP будет правильным решением:

   $_SERVER['REMOTE_ADDR']; //gives you the visitor's IP address

  basename($_SERVER["SCRIPT_NAME"]); //gives you the page name

  date();  // gives you the current date
  

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

Возможно, стоит взглянуть на Google Analytics — он дает много полезной статистики о посетителях (не на 100% вы можете получить отдельные IP-адреса, кто-нибудь может это уточнить?)

Редактировать:

ASP.NET

 Request.ServerVariables["REMOTE_ADDR"]; // ip
Request.ServerVariables["HTTP_REFERER"]; // page
  

Комментарии:

1. @Beginner, только что рассмотренный в вашем вопросе, который вы предпочли бы использовать ASP.net если это невозможно сделать в html — я бы сказал, что это было бы излишеством, учитывая стоимость хостинга и т.д., А большинство стандартных пакетов хостинга поддерживают php.

2. @Beginner Хорошо, я больше не работаю с .net, но добавил несколько вещей к моему ответу.

3. Текущая страница Request.FilePath

Ответ №3:

Для этого вы можете использовать PHP, если ваш сервер его поддерживает.

Ответ №4:

Вы можете использовать существующую платформу ведения журнала, такую как Log4Net.