K2 BlackPearl的日志提供了多种方式来记录K2的信息,日志配置在C:\Program Files\K2 blackpearl\Host Server\Bin\HostServerLogging.config中,打开配置文件,可以看到下面的片段:
 <ApplicationLevelLogSettings>
<ApplicationLevelLogSettings> <ApplicationLevelLogSetting Scope="Default">
    <ApplicationLevelLogSetting Scope="Default"> <LogLocationSettings>
      <LogLocationSettings> <LogLocation Name="ConsoleExtension" Active="True" LogLevel="Debug" />
        <LogLocation Name="ConsoleExtension" Active="True" LogLevel="Debug" /> <LogLocation Name="FileExtension" Active="False" LogLevel="All" />
        <LogLocation Name="FileExtension" Active="False" LogLevel="All" /> <LogLocation Name="EventLogExtension" Active="False" LogLevel="Debug" />
        <LogLocation Name="EventLogExtension" Active="False" LogLevel="Debug" /> <LogLocation Name="ArchiveExtension" Active="False" LogLevel="Debug" />
        <LogLocation Name="ArchiveExtension" Active="False" LogLevel="Debug" /> <LogLocation Name="MSMQExtension" Active="False" LogLevel="Debug" />
        <LogLocation Name="MSMQExtension" Active="False" LogLevel="Debug" /> </LogLocationSettings>
      </LogLocationSettings> </ApplicationLevelLogSetting>
    </ApplicationLevelLogSetting> </ApplicationLevelLogSettings>
</ApplicationLevelLogSettings>Name对应此config文件的Extensions节点中的Extension节点的Name属性,在下面可以看到。
Active控制是否使用此配置项,因此我们可以看出,默认情况下,K2只使用“ConsoleExtension”,也就是控制台模式。
LogLevel控制日志的级别。为了看到更详细的信息,我们调节这个属性来实现,从简单到详细依次是Warning->Error->Info->Debug->All
K2的调试:
在管理工具-服务中将K2服务停止,然后点击开始菜单的K2 blackpearl-K2 Server,此时K2会以控制台模式来启动服务,K2的相关信息就可以方便的看到,在我们的代码中使用Console.WriteLine("message") 可以方便的输出到这里。

另外使用命令行"C:\Program Files\K2 blackpearl\Host Server\Bin\K2HostServer.exe" > c:\k2info.txt 可以将信息输出到c:\k2info.txt
K2除了默认的集中记录日志的方式外,还让我们自己扩展实现自定义的记录方式,比如下面的片段:
 <ApplicationLevelLogSettings>
<ApplicationLevelLogSettings> <ApplicationLevelLogSetting Scope="Default">
    <ApplicationLevelLogSetting Scope="Default"> <LogLocationSettings>
      <LogLocationSettings> <LogLocation Name="ConsoleExtension" Active="False" LogLevel="Debug" />
        <LogLocation Name="ConsoleExtension" Active="False" LogLevel="Debug" /> <LogLocation Name="FileExtension" Active="False" LogLevel="All" />
        <LogLocation Name="FileExtension" Active="False" LogLevel="All" /> <LogLocation Name="EventLogExtension" Active="False" LogLevel="Debug" />
        <LogLocation Name="EventLogExtension" Active="False" LogLevel="Debug" /> <LogLocation Name="ArchiveExtension" Active="False" LogLevel="Debug" />
        <LogLocation Name="ArchiveExtension" Active="False" LogLevel="Debug" /> <LogLocation Name="MSMQExtension" Active="False" LogLevel="Debug" />
        <LogLocation Name="MSMQExtension" Active="False" LogLevel="Debug" /> </LogLocationSettings>
      </LogLocationSettings> </ApplicationLevelLogSetting>
    </ApplicationLevelLogSetting> <ApplicationLevelLogSetting Scope="SourceCode.Security.UserRoleManager.Runtime.UserRoleManagerServer">
   <ApplicationLevelLogSetting Scope="SourceCode.Security.UserRoleManager.Runtime.UserRoleManagerServer"> <LogLocationSettings>
    <LogLocationSettings> <LogLocation Name="ConsoleExtension" Active="True" LogLevel="Error" />
<LogLocation Name="ConsoleExtension" Active="True" LogLevel="Error" /> </LogLocationSettings>
</LogLocationSettings> </ApplicationLevelLogSetting>
</ApplicationLevelLogSetting> </ApplicationLevelLogSettings>
</ApplicationLevelLogSettings>我们可以看到,这里有两个ApplicationLevelLogSetting节点,不同的是两个ApplicationLevelLogSetting的Scope不同。具体情形我还没有具体尝试,抱歉,因为这样的扩展实现的效果非常有限。下面具体来说下另外一种方式的扩展:
在HostServerLogging.config,找到Extensions节点,可以看到这样的配置:
 <Extensions>
<Extensions> <Extension Name="ConsoleExtension" type="SourceCode.Logging.Extension.ConsoleExtension">
    <Extension Name="ConsoleExtension" type="SourceCode.Logging.Extension.ConsoleExtension"> <Property Name="Shorthand" value="true"/>
      <Property Name="Shorthand" value="true"/> </Extension>
    </Extension> <Extension Name="EventLogExtension" type="SourceCode.Logging.Extension.EventLogExtension" />
    <Extension Name="EventLogExtension" type="SourceCode.Logging.Extension.EventLogExtension" /> <Extension Name="FileExtension" type="SourceCode.Logging.Extension.FileExtension">
    <Extension Name="FileExtension" type="SourceCode.Logging.Extension.FileExtension"> <Property Name="LogFileName" value="HostServer.log"/>
      <Property Name="LogFileName" value="HostServer.log"/> <Property Name="LogFilePath" value="" />
      <Property Name="LogFilePath" value="" /> <Property Name="HashAlgorithm" value="CRC32" />
      <Property Name="HashAlgorithm" value="CRC32" /> </Extension>
    </Extension> <Extension Name="MSMQExtension" type="SourceCode.Logging.Extension.MSMQExtension">
    <Extension Name="MSMQExtension" type="SourceCode.Logging.Extension.MSMQExtension"> <Property Name="QueuePath" value=".\private$\SCQueue"/>
      <Property Name="QueuePath" value=".\private$\SCQueue"/> </Extension>
    </Extension> <Extension Name="ArchiveExtension" type="SourceCode.Logging.Extension.ArchiveExtension">
    <Extension Name="ArchiveExtension" type="SourceCode.Logging.Extension.ArchiveExtension"> <Property Name="HostServerConfigFileName" value="K2HostServer.config"/>
            <Property Name="HostServerConfigFileName" value="K2HostServer.config"/> <Property Name="ConfigDBConnectionName" value="HostserverDB"/>
      <Property Name="ConfigDBConnectionName" value="HostserverDB"/> </Extension>
    </Extension> </Extensions>
  </Extensions>在这里我们可以清楚的看到第一段XML中的ConsoleExtension,FileExtension,EventLogExtension等节点的Name是从哪里来的了。在这里我们来添加自己的扩展配置,例如发送Email。首先我们编写自定义扩展的代码,继承BaseExtension,只需重写一个方法:
 using System;
using System; using SourceCode.Logging;
using SourceCode.Logging; using SourceCode.Logging.Extension;
using SourceCode.Logging.Extension; using System.Net.Mail;
using System.Net.Mail; namespace LoggerExtension
namespace LoggerExtension {
{ public class Email : BaseExtension
    public class Email : BaseExtension {
    { public Email()
        public Email() {
        { }
        } override protected void LogMessage(MessageObject mo, String logStrMsg)
        override protected void LogMessage(MessageObject mo, String logStrMsg) {
        { try
            try {
            { //send email
               //send email
 }
            } catch
            catch {
            { throw;
                throw; }
            } return;
            return; }
        } }
    } }
}看得出来,非常简单 :)
然后在上面所示的Extensions节点中加入自定义扩展的一个节点
type是我们扩展代码dll的namespace.class,location是这个dll的所在位置。
对应着LogLocationSettings节点中也加入一个节点,注意两个Name要匹配.
最后保存config文件,一个日志记录的扩展设置就OK了。
 
 
 
                     
                    
                 
                    
                 
 
        
 
     
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号