#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.