2016-06-15 7 views
1

Ich versuche NLog zu verwenden, um eine Oracle-Datenbank zu protokollieren, bereits erstellt die Tabelle, aber wenn ich versuche, etwas einzuloggen bekomme ich die Ausnahme:NLog zur Datenbank (Oracle)

ORA-00928: fehlende SELECT Stichwort

Meine NLog.config Datei ist:

<?xml version="1.0" ?> 
<nlog autoReload="true" throwExceptions="true" internalLogFile="${basedir}/App_Data/nlog.txt" internalLogLevel="Debug" 
     internalLogToConsole="true"> 

    <targets> 
    <!--Useful for debugging--> 
    <target name="filelog" type="File" fileName="C:/App_Data/Site.log" 
    layout="${date}: ${message}" /> 

    <target name="databaselog" type="Database"> 

     <dbProvider>Oracle.DataAccess.Client</dbProvider> 

     <!-- database connection parameters --> 
     <!-- alternatively you could provide a single 'connectionstring' parameter --> 
     <connectionString>DATA SOURCE=database;PERSIST SECURITY INFO=True;USER ID=user;Password=password;Validate Connection=true</connectionString> 

     <commandText> 
     insert into RS_LOGTABLE ([log_user],[log_level],[log_date],[log_message]) values(@log_user,@log_level,@log_date,@log_message); 
     </commandText> 

     <parameter name="@log_user" layout="${message}"/> 
     <parameter name="@log_level" layout="${message}"/> 
     <parameter name="@log_date" layout="${date}"/> 
     <parameter name="@log_message" layout="${message}"/> 

    </target> 

    </targets> 

    <rules> 
    <logger name="*" minlevel="Trace" writeTo="filelog" /> 
    <logger name="*" minlevel="Trace" writeTo="databaselog" /> 
    </rules> 

</nlog> 

Und die Ausnahme tritt auf, wenn ich dies tun:

logger = LogManager.GetCurrentClassLogger(); 
logger.Debug("Teste logger"); 

ich schon versucht, den Einsatz ohne die Klammern zu tun und eine weitere Ausnahme erhalten:

**ORA-00936: missing expression** 
+1

Siehe das ** zweite ** Beispiel auf [dieser Seite] (http://nlog-project.org/documentation/v2.0.1/html/T_NLog_Targets_DatabaseTarget.htm) für ein Oracle-Beispiel, wenn auch eines, das 'System verwendet .Data.OracleClient' – stuartd

+0

Jetzt bekomme ich ORA-01036: ungültige Variable Name/Nummer ... –

Antwort

2

ich es für Sie zu spät erraten ist, aber ich werde Lösung für andere Posten, die das gleiche Problem hat. Ich habe es gerade gelöst.

Ich änderte Zeichen @ für Doppelpunkte um commandText und um parameter Tags ich entfernte es vollständig. Ich verwende keine Klammern und es hat angefangen zu arbeiten.

Es soll auf diese Weise richtig sein:

<commandText> 
    insert into RS_LOGTABLE (log_user,log_level,log_date,log_message) values(:log_user,:log_level,:log_date,:log_message); 
</commandText> 

<parameter name="log_user" layout="${message}"/> 
<parameter name="log_level" layout="${message}"/> 
<parameter name="log_date" layout="${date}"/> 
<parameter name="log_message" layout="${message}"/> 

ich es mit dbProvider Oracle.DataAccess.Client getestet.

Warnung für andere: Ich hatte eine Variable mit reserviertem Wort benannt und es wirft eine weitere Ausnahme. Weitere Details sind hier PHP ORA-01745: invalid host/bind variable name Warning

Endlich tut mir leid für mein Englisch, ich habe es nicht lange verwendet.