1

我正在尝试使用 Log4Net 并将我的消息记录到本地 SQLite DB。但是,当我运行应用程序时,会引发格式异常log4net.Config.XmlConfigurator.Configure();

这是我的配置文件:

<log4net>

<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
  <file value="log-file.txt" />
  <appendToFile value="true" />

  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%-5level] - %message%newline" />
  </layout>
</appender>

<appender name="DebugAppender" type="log4net.Appender.DebugAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%-5level] - %message%newline" />
  </layout>
</appender>


<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="0" />
  <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.77.0" />
  <connectionString value="Data Source=.\kapiti.db;Version=3;" />
  <commandText value="INSERT INTO Log (Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)" />
  <parameter>
    <parameterName value="@Date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </parameter>
  <parameter>
    <parameterName value="@Level" />
    <dbType value="String" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@Logger" />
    <dbType value="String" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%logger" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@Message" />
    <dbType value="String" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message" />
    </layout>
  </parameter>
</appender>

<!-- Setup the root category, add the appenders
       and set the default level -->
<root>
  <level value="DEBUG" />
  <appender-ref ref="DebugAppender" />
  <appender-ref ref="LogFileAppender" />
  <appender-ref ref="AdoNetAppender" />
</root>

该表是这样创建的,并且具有以下架构:

DROP TABLE IF EXISTS Log;
CREATE TABLE Log (
    LogId     INTEGER PRIMARY KEY,
    Date      DATETIME NOT NULL,
    Level     VARCHAR(50) NOT NULL,
    Logger    VARCHAR(255) NOT NULL,
    Message   TEXT DEFAULT NULL
    RowVersion INTEGER DEFAULT 1
);

CREATE TRIGGER Log_rowversion_trigger AFTER UPDATE ON Log 
BEGIN
UPDATE Log SET RowVersion = new.RowVersion + 1  WHERE Id = new.Id;
END;

如果您能看到我在哪里犯了错误,请告诉我,我整天都被困在这个问题上。

谢谢射频

堆栈跟踪:

mscorlib.dll!long.Parse(string s = "DateTime", System.Globalization.NumberStyles style = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign, System.IFormatProvider provider = {System.Globalization.NumberFormatInfo}) + 0x1a bytes 
mscorlib.dll!System.Convert.ToInt64(string value = "DateTime", System.IFormatProvider provider = {}) + 0x13 bytes   
mscorlib.dll!string.System.IConvertible.ToInt64(System.IFormatProvider provider = {}) + 0x7 bytes   
mscorlib.dll!System.Convert.DefaultToType(System.IConvertible value = "DateTime", System.Type targetType = {Name = "Int64" FullName = "System.Int64"}, System.IFormatProvider provider = {}) + 0xe5 bytes   
mscorlib.dll!string.System.IConvertible.ToType(System.Type type = {Name = "Int64" FullName = "System.Int64"}, System.IFormatProvider provider = {}) 
mscorlib.dll!System.Convert.ChangeType(object value = "DateTime", System.Type conversionType = {Name = "Int64" FullName = "System.Int64"}, System.IFormatProvider provider = {}) + 0x51 bytes   
log4net.dll!log4net.Util.OptionConverter.ParseEnum(System.Type enumType = {Name = "DbType" FullName = "System.Data.DbType"}, string value = "DateTime", bool ignoreCase = true) + 0x4d bytes    
log4net.dll!log4net.Util.OptionConverter.ConvertStringTo(System.Type target = {Name = "DbType" FullName = "System.Data.DbType"}, string txt = "DateTime") + 0x5d bytes  
log4net.dll!log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ConvertStringTo(System.Type type = {Name = "DbType" FullName = "System.Data.DbType"}, string value = "DateTime") + 0x41 bytes 
log4net.dll!log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(System.Xml.XmlElement element = {System.Xml.XmlElement}, object target = {log4net.Appender.AdoNetAppenderParameter}) + 0x282 bytes   
log4net.dll!log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(System.Xml.XmlElement element = {System.Xml.XmlElement}, System.Type defaultTargetType = {Name = "AdoNetAppenderParameter" FullName = "log4net.Appender.AdoNetAppenderParameter"}, System.Type typeConstraint = {Name = "AdoNetAppenderParameter" FullName = "log4net.Appender.AdoNetAppenderParameter"}) + 0x13a bytes   
log4net.dll!log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(System.Xml.XmlElement element = {System.Xml.XmlElement}, object target = {log4net.Appender.AdoNetAppender}) + 0x525 bytes    
log4net.dll!log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(System.Xml.XmlElement appenderElement = {System.Xml.XmlElement}) + 0x170 bytes  
log4net.dll!log4net.Repository.Hierarchy.XmlHierarchyConfigurator.FindAppenderByReference(System.Xml.XmlElement appenderRef = {System.Xml.XmlElement}) + 0xb1 bytes 
log4net.dll!log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseChildrenOfLoggerElement(System.Xml.XmlElement catElement = {System.Xml.XmlElement}, log4net.Repository.Hierarchy.Logger log = {log4net.Repository.Hierarchy.RootLogger}, bool isRoot = true) + 0x4a bytes    
log4net.dll!log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseRoot(System.Xml.XmlElement rootElement = {System.Xml.XmlElement}) + 0x1d bytes   
log4net.dll!log4net.Repository.Hierarchy.XmlHierarchyConfigurator.Configure(System.Xml.XmlElement element = {System.Xml.XmlElement}) + 0x1e1 bytes  
log4net.dll!log4net.Repository.Hierarchy.Hierarchy.XmlRepositoryConfigure(System.Xml.XmlElement element = {System.Xml.XmlElement}) + 0xe bytes  
log4net.dll!log4net.Repository.Hierarchy.Hierarchy.log4net.Repository.IXmlRepositoryConfigurator.Configure(System.Xml.XmlElement element = {System.Xml.XmlElement}) + 0x7 bytes 
log4net.dll!log4net.Config.XmlConfigurator.ConfigureFromXml(log4net.Repository.ILoggerRepository repository = {log4net.Repository.Hierarchy.Hierarchy}, System.Xml.XmlElement element = {System.Xml.XmlElement}) + 0x7a bytes   
log4net.dll!log4net.Config.XmlConfigurator.Configure(log4net.Repository.ILoggerRepository repository = {log4net.Repository.Hierarchy.Hierarchy}, System.IO.Stream configStream = {System.IO.FileStream}) + 0xbb bytes   
log4net.dll!log4net.Config.XmlConfigurator.Configure(log4net.Repository.ILoggerRepository repository = {log4net.Repository.Hierarchy.Hierarchy}, System.IO.FileInfo configFile = {\Program Files\AlliedPetroleum.Client\AlliedPetroleum.Client.exe.config}) + 0xa7 bytes    
log4net.dll!log4net.Config.XmlConfigurator.Configure(log4net.Repository.ILoggerRepository repository = {log4net.Repository.Hierarchy.Hierarchy}) + 0x52 bytes   

log4net.dll!log4net.Config.XmlConfigurator.Configure() + 0xf 字节 AlliedPetroleum.Client.exe!AlliedPetroleum.Client.Program.Main() 第 47 行 + 0x5 字节 C#

4

0 回答 0