2013-03-20 25 views
7

Obecnie w moim projekcie log4net służy do rejestrowania wszystkich wyjątków, informacji, ostrzeżeń itp. Do pliku tekstowego, ale teraz chcę, aby wszystkie te informacje były rejestrowane w bazie danych tabela zamiast pliku.
Proszę, pomóż mi to zrobić.Jak korzystać z narzędzia Log4Net do logowania do bazy danych za pomocą C#

Wielkie dzięki z góry.

Konfiguracja:

<log4net> 
    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="ADONetAppender" /> 
    </root> 
    <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> 
    <bufferSize value="100" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="server=xxxx; uid=xxxx; pwd=xxxx; database=xxxx" /> 
    <commandText value="INSERT INTO log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" /> 
    <parameter> 
     <parameterName value="@log_date"/> 
     <dbType value="DateTime"/> 
     <layout type="log4net.Layout.RawTimeStampLayout"/> 
    </parameter> 
    <parameter> 
     <parameterName value="@thread"/> 
     <dbType value="String"/> 
     <size value="255"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%thread"/> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@log_level"/> 
     <dbType value="String"/> 
     <size value="50"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level"/> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@logger"/> 
     <dbType value="String"/> 
     <size value="255"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%logger"/> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@message"/> 
     <dbType value="String"/> 
     <size value="4000"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message"/> 
     </layout> 
    </parameter> 
    <parameter> 
     <parameterName value="@exception"/> 
     <dbType value="String"/> 
     <size value="2000"/> 
     <layout type="log4net.Layout.ExceptionLayout"/> 
    </parameter> 
    </appender> 
</log4net> 

kod w pliku .cs:

private log4net.ILog log = log4net.LogManager.GetLogger(typeof(ImportGlobalIPVData)); 
log.Error("This is Error"); 

Ale nic nie zostanie wstawiony do tabeli dziennika po użyciu powyżej kodu.

+2

Z pewnością zostało to zrobione wiele razy wcześniej (i dokumentowane wiele razy wcześniej). Być może możesz opisać, co próbujesz i dlaczego utknąłeś. – Reddog

+0

Czy możesz udostępnić łącze, skąd mogę uzyskać szczegółowe informacje, ponieważ nigdy wcześniej nie używałem log4net. –

+0

Jeśli jest to SQLServer, istnieje przykład praw [tutaj] (http://stackoverflow.com/questions/3279524/storing-log4net-messages-in-sql-server) na StackOverflow. – nvoigt

Odpowiedz

4

Możesz mieć wygląd here, myślę, że to jest dokładnie to, czego potrzebujesz.

Pamiętaj, że jeśli chcesz używać log4net z aplikacji klienckiej i zapisywać w bazie danych, możesz rozważyć umieszczenie usługi pomiędzy. W takim przypadku można łatwo napisać własną kartę log4net, która wywołuje LogService (fire and forget), która loguje się do bazy danych (prawdopodobnie przy użyciu MSMQ).

+0

Tak, tylko z tego linku mogę skonfigurować kod, aby zapisać dziennik do bazy danych, ale zauważyłem, że tabela dziennika nie odzwierciedla natychmiast wpisów dziennika, Czy istnieje jakieś ustawienie, aby natychmiast odzwierciedlić logi w tabeli? –

+0

Zauważyłem jeszcze jedno dziwne zachowanie, że kiedy zapisuję plik global.asax wszystkie wpisy dziennika są widoczne w tabeli, nie wiem, jakie jest połączenie między plikiem global.asax a bazą danych? –

+4

Mam rozwiązanie, ponieważ użyłem '' w konfiguracji, dlatego dziennik nie jest natychmiast wstawiany do tabeli. Zmieniłem go na '' i mój problem został rozwiązany. Dziękuję wszystkim za twoją sprzeczność –