C# 如何在Xamarin表单项目中使用NLog记录信息
我正在使用Nlog记录我的projectcross platform xamarin项目中的异常 我的实施: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
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);