Задать вопрос
gloomkolomna
@gloomkolomna
c#, WPF

Как организовать логирование действий пользователя в программе?

Здравствуйте.
Занимаюсь разработкой одного программного комплекса и встал вопрос о логировании (журнале) действий пользователя.
Например, авторизованный пользователь изменил фамилию клиента (textbox), а также добавил его в новую категорию (combobox) и написал примечание (richtextbox).
Вопрос: как лучше реализовать запись всех действий (изменений контролов) в лог-файл (не важно, в txt или в mysql)?
  • Вопрос задан
  • 14784 просмотра
Подписаться 8 Оценить Комментировать
Решения вопроса 2
@veitmen
Приветствую.

Почитал ответы. Есть несколько комментариев.

1. Log4Net отличная штука. Вам уже написали про него, его и берите. Ставьте через NuGet.
2. Не думайте делать логирование в самой БД, Никаких триггеров и т.д. Вообще забудьте о том, что в БД можно что-то делать, кроме хранения данных. Есть только одна причина что-то делать в БД - это жесткое требование заказчика, которое нельзя изменить.
3. Я не думаю, что Вам нужно записывать именно изменения контролов. Скорее Вам нужно записывать не просто изменения контролов, а изменения внесенные в хранилище данных. Т.к. пока я редактирую запись, это не надо логировать, надо логировать то, что я сохранил изменения.
4. У вас есть слой бизнес логики, вот там и логируйте информацию о том, что происходит в системе.
5. Есть еще хорошая вещь под названием аспектно-ориентированное программирование. Посмотрите что это, и как может помочь в создании системы логирования.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Существует удобная библиотека NLog. Довольно проста в использовании. Можно настроить логирование в базу и в текстовый файл, да и вобще куда угодно.

http://nlog-project.org/
Ответ написан
deniskozlov
@deniskozlov
Senior ASP.NET MVC/JS Developer
NLog(nlog-project.org) хорош, давно им пользуюсь от сервера до винфона, сую его, как говорится, везде)) Тут есть статья, сравнивающая фреймворки для логирования habrahabr.ru/post/98638
Ответ написан
Комментировать
@xflash
Нужно именно логгировать изменение контролов или уже изменение записи в таблице после сохранения?
- если записи в таблицы, проще реализовать в базе данных посредством триггеров. Путем сравнения значения до и после сохранения.
- если именно контролов, то они наверняка значения из БД через источник данных. Так что можно работать с изменениями в них!
- если именно важен сам факт изменений, а не сохраненное значение - добавьте обработку события change к каждому контролу и пишите в txt по этому событию.
Ответ написан
afiskon
@afiskon
Если время от времени нужно просто разобраться, кто что делал, пишите в файл. Если бизнес хочет сам поглядывать в логи с фильтрацией по дате и так далее, пишите в СУБД.
Ответ написан
gloomkolomna
@gloomkolomna Автор вопроса
c#, WPF
А подскажите такую вещь, вот я пишу в конфиге следующее:
<target name="mysql" xsi:type="Database"
            keepConnection="true"
            useTransactions="false"
            dbProvider="MySql.Data.MySqlClient"
            connectionString="Server=****;Database=****;Uid=****;Password=****;Connect Timeout=5;"
            commandText="INSERT INTO tbl_log (log_message) VALUES (@log_message)">
      <parameter name="@log_message" layout="${message}"/>
    </target>

Но не работает (не добавляет записи). В чем может быть ошибка (ну, явно, что в подключении в mysql, но как тогда правильно сделать?)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы