我不确定是否可以向NLog添加数据库架构。我尝试过这种方法:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Info"
internalLogFile="C:\temp\internallog.txt">
<targets>
<target name="logfile" xsi:type="File"
fileName="C:\temp/${shortdate}_logfile.txt"
layout="${longdate} ${level:uppercase=true} ${message}"/>
<target xsi:type="Database" name="database"
connectionString="Server=.\SQLEXPRESS;Database=AppDB;Trusted_Connection=True;MultipleActiveResultSets=true;User Id=AppDBUser;Password=PSSWRD!"
commandType="StoredProcedure"
commandText="[AppDB].[ASTONE.EventLogs]">
<parameter name="@message" layout="${message}" />
<parameter name="@level" layout="${level}" />
<parameter name="@logger" layout="${logger}" />
<!--<dbProvider>System.Data.SqlClient</dbProvider>-->
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="database" />
</rules>
</nlog>
但是,这给了我这个错误:
错误DatabaseTarget(Name = database):写入数据库时出错。 异常:System.Data.SqlClient.SqlException(0x80131904):无法 找到存储过程“ AppDB.ASTONE.EventLogs”。
我浏览了NLog Wiki,但似乎也没有。
答案 0 :(得分:3)
这是从内存中获取的,但是我认为您的commandText
值必须是这样:
commandText="[ASTONE].[EventLogs]"
分隔的.
必须在方括号的外部。
由于您在连接字符串中指定了数据库名称,因此在命令文本中不需要它。
更新了新信息
由于ASTONE.EventLogs
是一个表,您将需要编写一个存储过程以将参数值插入其中。那是你丢失的那一块。
这是一个示例存储过程:
CREATE PROC [ASTONE].[LogEvent]
(
@message nvarchar(max),
@level int,
@logger nvarchar(1024)
)
AS
INSERT INTO [ASTONE].[EventLogs]
( message, level, logger )
VALUES( @message, @level, @logger)
我正在猜测您的EventLogs
表的布局以及参数的类型和定义。
然后您的commandText
属性如下所示:
commandText="[ASTONE].[LogEvent]"