2016-11-12 234 views
0

我正在嘗試使用nlog數據庫目標。 如果我不手動創建數據庫,首先它不起作用。 另一件更重要的事情是,我無法登錄。我收到有關我的參數佈局的錯誤。 從n日誌內註銷放:nlog數據庫目標參數佈局錯誤

2016-11-12 18:45:49.0479 Debug Setting 'DatabaseParameterInfo.layout' to '${logged}' 
2016-11-12 18:45:49.0744 Warn Error when setting property 'Layout' on 'NLog.Targets.DatabaseParameterInfo' Exception: System.ArgumentException: LayoutRenderer cannot be found: 'logged' 
    at NLog.Config.Factory`2.CreateInstance(String name) 
    at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr) 
    at NLog.Layouts.LayoutParser.CompileLayout(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr, Boolean isNested, String& text) 
    at NLog.Layouts.SimpleLayout.set_Text(String value) 
    at NLog.Internal.PropertyHelper.TryNLogSpecificConversion(Type propertyType, String value, Object& newValue, ConfigurationItemFactory configurationItemFactory) 
    at NLog.Internal.PropertyHelper.SetPropertyFromString(Object obj, String propertyName, String value, ConfigurationItemFactory configurationItemFactory) 
2016-11-12 18:45:49.0909 Error Error in Parsing Configuration File. Exception: NLog.NLogConfigurationException: Exception occurred when loading configuration from C:\Github\private\WeBees\WeBees Client\WeBees.Server\NLog.config ---> NLog.NLogConfigurationException: Error when setting property 'Layout' on NLog.Targets.DatabaseParameterInfo ---> System.ArgumentException: LayoutRenderer cannot be found: 'logged' 
    at NLog.Config.Factory`2.CreateInstance(String name) 
    at NLog.Layouts.LayoutParser.ParseLayoutRenderer(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr) 
    at NLog.Layouts.LayoutParser.CompileLayout(ConfigurationItemFactory configurationItemFactory, SimpleStringReader sr, Boolean isNested, String& text) 
    at NLog.Layouts.SimpleLayout.set_Text(String value) 
    at NLog.Internal.PropertyHelper.TryNLogSpecificConversion(Type propertyType, String value, Object& newValue, ConfigurationItemFactory configurationItemFactory) 
    at NLog.Internal.PropertyHelper.SetPropertyFromString(Object obj, String propertyName, String value, ConfigurationItemFactory configurationItemFactory) 
    --- End of inner exception stack trace --- 
    at NLog.Internal.PropertyHelper.SetPropertyFromString(Object obj, String propertyName, String value, ConfigurationItemFactory configurationItemFactory) 
    at NLog.Config.XmlLoggingConfiguration.ConfigureObjectFromAttributes(Object targetObject, NLogXmlElement element, Boolean ignoreType) 
    at NLog.Config.XmlLoggingConfiguration.AddArrayItemFromElement(Object o, NLogXmlElement element) 
    at NLog.Config.XmlLoggingConfiguration.SetPropertyFromElement(Object o, NLogXmlElement element) 
    at NLog.Config.XmlLoggingConfiguration.ParseTargetElement(Target target, NLogXmlElement targetElement) 
    at NLog.Config.XmlLoggingConfiguration.ParseTargetsElement(NLogXmlElement targetsElement) 
    at NLog.Config.XmlLoggingConfiguration.ParseNLogElement(NLogXmlElement nlogElement, String filePath, Boolean autoReloadDefault) 
    at NLog.Config.XmlLoggingConfiguration.ParseTopLevel(NLogXmlElement content, String filePath, Boolean autoReloadDefault) 
    at NLog.Config.XmlLoggingConfiguration.Initialize(XmlReader reader, String fileName, Boolean ignoreErrors) 
    --- End of inner exception stack trace --- 

我nlog.config

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     internalLogFile="C:\Github\private\WeBees\WeBees Client\WeBees.Server\Logs\nlog.txt" internalLogLevel="Trace"> 
    <targets> 
    <target name="logfile" xsi:type="File" fileName="C:\Github\private\WeBees\WeBees Client\WeBees.Server\Logs\log.txt" /> 
    <target xsi:type="ColoredConsole" name="console" /> 
    <target name="database" xsi:type="Database"> 
     <!-- 
    Remarks: 
    The appsetting layouts require the NLog.Extended assembly. 
    The aspnet-* layouts require the NLog.Web assembly. 
    The Application value is determined by an AppName appSetting in Web.config. 
    The "NLogDb" connection string determines the database that NLog write to. 
    The create dbo.Log script in the comment below must be manually executed. 
    --> 

     <connectionStringName>dev</connectionStringName> 

     <!-- 
    SET ANSI_NULLS ON 
    SET QUOTED_IDENTIFIER ON 
    CREATE TABLE [dbo].[Log] (
     [Id] [int] IDENTITY(1,1) NOT NULL, 
     [Application] [nvarchar](50) NOT NULL, 
     [Logged] [datetime] NOT NULL 
    CONSTRAINT [PK_dbo.Log] PRIMARY KEY CLUSTERED ([Id] ASC) 
     WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
    --> 

     <commandText> 
     insert into dbo.Log (
     Application, Logged 
     ) values (
     @Application, @Logged 
     ); 
     </commandText> 

     <parameter name="@application" layout="dadasda" /> 
     <parameter name="@logged" layout="${logged}" /> 
    </target> 
    </targets> 
    <rules> 
    <logger name="*" minlevel="Info" writeTo="logfile,console" /> 
    </rules> 
</nlog> 

如果我手動創建表,並把常量佈局就像它的工作原理「應用」參數。

我跟着文檔,但不能使它的工作。我有NLog &已安裝NLog.Web擴展。

在此先感謝!

回答

0

如錯誤消息所示,您應該定義${logged},例如,在您的配置文件:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     internalLogFile="C:\Github\private\WeBees\WeBees Client\WeBees.Server\Logs\nlog.txt" internalLogLevel="Trace"> 

    <variable name="logged" value="my var" /> 
    <targets> 

或與其他佈局渲染器,如${message}替換它,請參閱list of possible layout renderers

關於創建表,NLOG將只創建表,如果你提供了一個安裝查詢:

<target xsi:type="Database" name="db"> 

    <!-- connection string --> 
    <dbProvider>System.Data.SqlClient</dbProvider> 
    <connectionString>server=.\SQLEXPRESS;database=MyLogs;integrated security=sspi</connectionString> 

    <!-- commands to install database --> 
    <install-command> 
    <text>CREATE DATABASE MyLogs</text> 
    <connectionString>server=.\SQLEXPRESS;database=master;integrated security=sspi</connectionString> 
    <ignoreFailures>true</ignoreFailures> 
    </install-command> 

    <install-command> 
    <text> 
     CREATE TABLE LogEntries(
     id int primary key not null identity(1,1), 
     TimeStamp datetime2, 
     Message nvarchar(max), 
     level nvarchar(10), 
     logger nvarchar(128)) 
    </text> 

,並調用安裝,C#:

LogManager.Configuration.Install(new InstallationContext()); //install all the targets, e.g. database, eventlogger etc.