作为概念验证,我正在使用包装 WCF 服务代理的控制台应用程序。我通过代理执行一些调用并将结果写入控制台。WCF 服务的基础是使用 NHibernate 作为 ORM 构建在存储库模式上的数据访问层。我想将 NHib 生成的 SQL 写入控制台。
我曾尝试使用 NuGet 包和此处的指南配置 NLog,但没有成功,但我怀疑我可能没有正确理解在我的多层架构中我需要在哪里执行这些不同的配置位。这是描述我的布局的尝试:
Solution
|
-- WCF Service
|
-- DAL
| | (NHibernate is used here)
| -- hibernate.cfg.xml
| NLog.config
| App.config (r)
-- WCF Client (console app)
|
--App.config (c)
hibernate.cfg.xml 内容:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="show_sql">true</property>
<property name="connection.connection_string">Data Source=.\SQLEXPRESS;Initial Catalog=AdventureWorks2012;User ID=**;Password=********</property>
</session-factory>
</hibernate-configuration>
NLog.config 内容:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="trace" type="Trace" />
</targets>
<rules>
<logger name="NHibernate.SQL" writeTo="trace" />
</rules>
</nlog>
App.config (r) 内容:
<configuration>
<appSettings>
<add key="nhibernate-logger" value="NHibernate.NLogLoggerFactory, NHibernate.NLog" />
</appSettings>
</configuration>
App.config(c) 内容:
<configuration>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener" />
</listeners>
</trace>
</system.diagnostics>
<appSettings>
<add key="nhibernate-logger" value="NHibernate.NLogLoggerFactory, NHibernate.NLog" />
</appSettings>
</configuration>
我的 NUnit 单元测试显示 SQL 语句,因此show-sql
hibernate.cfg.xml 中的指令工作正常。如果我在控制台应用程序中插入一个Trace.WriteLine()
显示在控制台中的应用程序,那么(我希望)写入 Trace 的任何内容都应该显示在那里。但我在控制台中看不到任何 SQL。
我假设我将一些.config
指令放在了我的应用程序的错误层中,但是在哪里?