• NHibernate中使用Guid作为主键、项目中NHibernate与Log4net共存


    在NHibernate中使用Guid作为主键需要注意几点:

    1. 数据库中Guid类型为uniqueidentifier,同时必须给定默认值。

    2. 生成的实体类中类型为System.Guid

    3. 生成的Mapping文件中id对应的class为guid<注意大小写>,id对应的class还有几种不同类型,分别代表不一样的意义,自己Google一下。

    4. 使用ISession.Save()后同时还要使用ISession.Flush()<否则数据无法保存进数据库>,至于Flush方法作用,自己Google一下。

    网站中同时使用NHibernate和Log4net

    1. NHibernate3.0以前的版本都是使用Log4net来记录日志,打3.0开始,它便有了自己的日志记录器

    2. 如果项目中即使用了NHibernate,也使用了Log4net,这时在Log4net的配置文件中就要为NHibernate设定相应的配置节,我想它们有点像情侣分手后还偶尔寂莫上上床感觉差不多,呵呵,感觉不干不净的。

    3. <logger name="NHibernate" additivity="false">

            <level value="OFF" />         

        <appender-ref ref="RollingLogFileAppender" />     

      </logger>     

      <logger name="NHibernate.SQL" additivity="false">         

        <level value="OFF" />         

        <appender-ref ref="RollingLogFileAppender" />     

      </logger>

       3.1 上面的两个logger的配置不能少,否则当你有写入logger的动作时,NHibernate就会报错了,而且报错级别是整个进程级别的,不重启WEB服务是不会好的

       3.2 第一个logger的level级别不能大于WARN,否则会出现与3.1类似的错误

       3.3 如果你想关闭NHibernate的日志写入,那就将两个logger的level都设置为OFF吧!

    附上完整的Log4net.config文件

    <?xml version="1.0"?>
    <log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
    <root>
    <level value="ALL" />
    <appender-ref ref="LogFileAppender" />
    <!--<appender-ref ref="ConsoleAppender" />
    <appender-ref ref="EventLogAppender" />
    <appender-ref ref="RollingLogFileAppender" />-->
    </root>
    <logger name="NHibernate" additivity="false">
    <level value="OFF" />
    <appender-ref ref="RollingLogFileAppender" />
    </logger>
    <logger name="NHibernate.SQL" additivity="false">
    <level value="OFF" />
    <appender-ref ref="RollingLogFileAppender" />
    </logger>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <file value="e:\log.log" />
    <layout type="log4net.Layout.PatternLayout">
    <!--每条日志末尾的文字说明-->
    <footer value="[Footer]--Test By Lucky.zeng" />
    <!--输出格式
    每种转换符号都以
    %开始,后面跟着一个格式符号和换符号。
    %-数字  :该项的最小长度,小于最小长度的用空格填充
    %m(message) :输出的日志消息
    %n(new line) :换行
    %d(datetime) :输出当前语句运行的时刻
    %r(run time) :输出程序从运行到执行到当前语句时消耗的毫秒数
    %t(thread id):当前语句所在的线程ID
    %p(priority) : 日志的当前优先级别,即DEBUG、INFO、WARN…等
    %c(class) :当前日志对象的名称,
    %L(line ) :输出语句所在的行号
    %F(file name):输出语句所在的文件名
    %logger 日志名称
    -->
    <conversionPattern value="时间:%date [线程:%thread] %-5level [类:%c][%L行]%n %-5level:%message%newline" />
    </layout>
    </appender>
    <!--定义输出到控制台命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
    <!--conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /-->
    <conversionPattern value="时间:%date [线程:%thread] %-5level [类:%c][%L行]%n %-5level:%message%newline" />
    </layout>
    </appender>
    <!--定义输出到windows事件中-->
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
    </appender>
    <!--RollingFileAppender是输出源也是输出到文件中,只是以自增长的方式-->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="log/system_log_"/>
    <!--是否覆盖-->
    <param name="AppendToFile" value="true"/>
    <!--设置无限备份=-1 ,最大备份数为1000-->
    <param name="MaxSizeRollBackups" value="100"/>
    <!--每个文件的最大20k-->
    <param name="MaximumFileSize" value="1KB"/>
    <!--名称是否可以更改 为false为可以更改-->
    <param name="StaticLogFileName" value="false"/>
    <!--文件名称-->
    <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
    <!--conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline" /-->
    <conversionPattern value="时间:%date [线程:%thread] %-5level [类:%c][%L行]%n %-5level:%message%newline" />
    </layout>
    </appender>
    </log4net>


  • 相关阅读:
    UI自动化之鼠标、键盘事件
    iframe框中元素定位
    接口 Interface
    序列化和反序列化
    密封类和部分类
    简单工场设计模式
    ADO.NET数据库操作
    集合
    里氏转换
    装箱和拆箱
  • 原文地址:https://www.cnblogs.com/zengen/p/1992941.html
Copyright © 2020-2023  润新知