Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Xamarin表单项目中使用NLog记录信息_C#_Xamarin.forms_Nlog_Audit Logging - Fatal编程技术网

C# 如何在Xamarin表单项目中使用NLog记录信息

C# 如何在Xamarin表单项目中使用NLog记录信息,c#,xamarin.forms,nlog,audit-logging,C#,Xamarin.forms,Nlog,Audit Logging,我正在使用Nlog记录我的projectcross platform xamarin项目中的异常 我的实施: public interface ILogger { void Trace(string text, params object[] args); void Debug(string text, params object[] args); void Info(string text, params object[] args); void Warn(st

我正在使用Nlog记录我的projectcross platform xamarin项目中的异常

我的实施:

public interface ILogger
{
    void Trace(string text, params object[] args);
    void Debug(string text, params object[] args);
    void Info(string text, params object[] args);
    void Warn(string text, params object[] args);
    void Error(string text, params object[] args);
    void Fatal(string text, params object[] args);
}

public interface ILogManager
{
    ILogger GetLog([System.Runtime.CompilerServices.CallerFilePath]string callerFilePath = "");
}
在特定于平台的UWP项目中,我创建了两个类:

public class NLogLogger : ILogger
{
    private Logger log;

    public NLogLogger(Logger log)
    {
        this.log = log;
    }

    public void Debug(string text, params object[] args)
    {
        log.Debug(text, args);
    }

    public void Error(string text, params object[] args)
    {
        log.Error(text, args);
    }

    public void Fatal(string text, params object[] args)
    {
        log.Fatal(text, args);
    }

    public void Info(string text, params object[] args)
    {
        log.Info(text, args);
    }

    public void Trace(string text, params object[] args)
    {
        log.Trace(text, args);
    }

    public void Warn(string text, params object[] args)
    {
        log.Warn(text, args);
    }

}
NLogManager类:

  public class NLogManager : ILogManager
  {
    public NLogManager()
    {
        var config = new LoggingConfiguration();

        var consoleTarget = new ConsoleTarget();
        config.AddTarget("console", consoleTarget);

        var consoleRule = new LoggingRule("*", LogLevel.Trace, consoleTarget);
        config.LoggingRules.Add(consoleRule);

        var fileTarget = new FileTarget();
        string folder = ApplicationData.Current.LocalFolder.Path;
        string fileNameWithDate = "Log_" + DateTime.Today.ToString("MMMddyyyy") + ".txt";
        fileTarget.FileName = Path.Combine(folder, fileNameWithDate);
        config.AddTarget("file", fileTarget);

        var fileRule = new LoggingRule("*", LogLevel.Warn, fileTarget);
        config.LoggingRules.Add(fileRule);

        LogManager.Configuration = config;
    }

    public EverwellUnpluggedLogger.ILogger GetLog([CallerFilePath] string callerFilePath = "")
    {
        string fileName = callerFilePath;

         if (fileName.Contains("/"))
           {
               fileName = fileName.Substring(fileName.LastIndexOf("/", StringComparison.CurrentCultureIgnoreCase) + 1);
           }

           var logger = LogManager.GetLogger(fileName);
           return new NLogLogger(logger);
    }
}
若在我使用的任何方法中抛出异常,请在下面的行中将其记录在文本文件中。这个很好用

ILogger logger = DependencyService.Get<ILogManager>().GetLog();
        logger.Error(ex.Message, ex);
是否需要更改Nlog.config文件中的任何配置?
请提供帮助。

如果您的问题是为什么此行没有登录到fileTarget:

logger.Info(logs);
那么问题可能是您只包含警告或更糟的警告:

var fileRule = new LoggingRule("*", LogLevel.Warn, fileTarget);
请尝试改为:

var fileRule = new LoggingRule("*", LogLevel.Info, fileTarget);
var fileRule = new LoggingRule("*", LogLevel.Info, fileTarget);