我已经获得了一个名为MYLogger.dll的DLL,它显然是log4net的包装器,并且在其中定义了MyLogger和DefaultLogger类,并且这些类都继承了ILogger。我必须登录Asp.Net Web Api服务的例外和信息,该服务在.net。
中的一个解决方案中定义了多个项目这些是MyLogger类的签名
public MyLogger(string name, string configFilePath = "",
string newLogFileFolderName = "");
public MyLogger(Type t, string configFilePath = "",
string newLogFileFolderName = "");
public event EventHandler<EventArgs<string>> MessageLogged;
public void Log(LogLevel logLevel, string message, object[] args = null);
public void LogException(Exception ex, string customMessage = "",
LogLevel logLevel = LogLevel.Error);
DefaultLogger类的签名是
public DefaultLog();
public static DefaultLog Logger { get; }
public event EventHandler<EventArgs<string>> MessageLogged;
public void Log(LogLevel logLevel, string message, object[] args = null);
public void LogException(Exception ex, string customMessage = "",
LogLevel logLevel = LogLevel.Error);
我的名为MyLog.Config的配置文件看起来像
<configuration>
<!-- Register a section handler for the log4net section -->
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
<log4net>
<appender name="ErrorFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C\Data\Log\MyErrorLog.txt" />
<appendToFile value="true" />
<maxSizeRollBackups value="-1" />
<maximumFileSize value="10MB" />
<rollingStyle value="Size" />
<layout type="MyLogger.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %message%newline" />
</layout>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
</appender>
<appender name="InfoFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C\Data\Log\MyInfoLog.txt" />
<appendToFile value="true" />
<maxSizeRollBackups value="-1" />
<maximumFileSize value="10MB" />
<rollingStyle value="Size" />
<layout type="MyLogger.MyPatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="INFO" />
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ErrorFileAppender" />
<appender-ref ref="InfoFileAppender" />
</root>
</log4net>
</configuration>
我正在尝试使用记录器类viz MyLogger进行异常记录和信息记录,如下所示。
private static ILogger log = new Logger(MethodBase.GetCurrentMethod()
.DeclaringType, @"~\MyLog.config"," ");
即使我给第二个参数(对于信息或异常文本文件)而不是空的路径,仍然没有任何内容被写入其中任何一个。我试图抛出异常,但异常日志记录仍然没有成功。
在日志对象的帮助下,我正在尝试实现信息记录,如下所示
string message = string.Format("The feature class name is {0} and the type is {1}",Name,Type);
//DefaultLog.Logger.Log(LogLevel.Info, message);
log.Log(LogLevel.Info, message);
你可以看到我尝试使用DefaultLog和log对象(这是一个带有MyLogger类的ILog接口的实现)和我尝试使用以下代码实现异常的方式同时抛出一些异常控制器动作
catch (HttpResponseException ex)
{
string errorMessage = string.Format("Getting {0} data gives error because either fcollection is empty or soemthing is null Error:{1}",
Name, ex.Message);
//DefaultLog.Logger.LogException(ex, errorMessage, LogLevel.Error);
log.LogException(ex, errorMessage, LogLevel.Error);
}
对于信息和异常,没有任何内容被记录/写入我们提到的文本文件及其在Xml配置文件中的相应路径。
关于MyLogger类的两个构造函数最奇怪的是两个构造函数都将字符串作为configfile路径的参数,字符串作为newLogFileFolderName的参数,我怎么能弄清楚这个newLogFileFolderName是否要求文本文件的路径写入信息日志的位置或写入异常日志的文本文件。而且我假设在MyLogger类的构造函数中就像
XmlConfigurator.ConfigureAndWatch(new FileInfo(MyLog.config))
已被使用,这就是为什么配置文件的第一个参数已被替换为ConfigureAndWatch()方法的参数,但我不知道在MyLogger的构造函数代码中使用第二个参数是什么,即我需要将MyLogger类实例化两次一次信息文本文件的路径和异常文本文件的第二个时间路径作为构造函数中的第二个参数。这对我来说没有意义。它非常令人困惑。所有建议都将受到高度赞赏。