我的解决方案有多个项目。我在类库项目中的日志包装器类下面有这个。类库的dll在其他项目中被引用,因此我可以使用此包装器类。
但是我很荣幸地在其他项目中访问_Logger或_Log来传递数据以写入日志。我在这里想念什么?
public class LoggerManager
{
public static LoggerManager _Logger;
public static ILog _log;
public LoggerManager()
{
Init();
}
public static LoggerManager Instance
{
get
{
if (_Logger == null)
{
_Logger = new LoggerManager();
}
return _Logger;
}
}
private void Init()
{
_log = LogManager.GetLogger(typeof(Program));
XmlConfigurator.Configure();
}
public void Error(Exception ex, [CallerMemberName] string memberName = "", [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0)
{
if (_log == null)
{
Init();
}
_log.Error(string.Format("Error from Method : {0} in file {1} at line {2}", memberName, filePath, lineNumber), ex);
}
}
答案 0 :(得分:1)
确保您要尝试访问静态变量,如下所示:
LoggerManager._log
或LoggerManager.Logger
而不是通过您的实例:
var a = new LoggerManager()
a._log; // this wont work as the instance doesn't know about the static variables!
但是,当您尝试访问公共静态变量时,似乎就像是一个奇怪的包装器。私有化它们并通过财产通过您的实例使它们可用会更好吗?如:
public class LoggerManager
{
private static LoggerManager _logger;
private static ILog _log;
public LoggerManager Logger => LoggerManager._logger;
public ILog LogInstance => LoggerManager._log;
// rest of your code...
}
或者也许您可以看看拥有单例类。