如何在Xamarin.iOS中使用iOS OSLog?
我确实成功地使用了NSLog,如下所示,但是我看不到使用NSLog设置子系统(设置为包标识符)的方法,这样我就可以使用它来过滤Console.app中的日志。
public class Logger
{
#if DEBUG
[DllImport(ObjCRuntime.Constants.FoundationLibrary)]
private extern static void NSLog(IntPtr message);
#endif
public void WriteLine(string line)
{
#if DEBUG
using (var nss = new NSString(line))
{
NSLog(nss.Handle);
}
#endif
}
}发布于 2018-09-21 01:55:43
OSLog是一个ObjC结构(包含两个常量字符),并提供了一个内核方法os_log_create来分配一个常量字符。
注:有关详细信息,请参阅os/log.h。
定义:
[DllImport("__Internal", EntryPoint = "os_log_create")]
public static extern IntPtr os_log_create(string subsystem, string category);用法:
var oslog = os_log_create("some.bundle.id", "StackOverflowCategory");仅供参考:你的NSLog应该包含一个打印格式的字符串作为NSString
[DllImport (Constants.FoundationLibrary, EntryPoint = "NSLog")]
extern static void NSLog (IntPtr format, [MarshalAs (UnmanagedType.LPStr)] string s);发布于 2020-05-23 04:55:43
在Xamarin.iOS中,有一个名为Default的静态CoreFoundation.OSLog对象,用户可以直接使用它,它将使用指定的OSLogLevel参数记录消息,如OSLogLevel.Debug、OSLogLevel.Error等。您可以在Xamarin.iOS代码中使用一个在Debug级别记录消息的方法:
using CoreFoundation;
// ...
public void Write(string message)
{
OSLog.Default.Log(OSLogLevel.Debug, message);
}如果要使用子系统和类别,则必须使用适当的构造函数实例化一个OSLog实例,并使用该实例记录您的消息。您可能希望保存对创建的实例的静态引用,并像使用OSLog.Default一样使用它。
public partial class AppDelegate : Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
public static OSLog LoggerInstance;
public override bool FinishedLaunching(UIApplication app, NSDictionary launchOptions)
{
LoggerInstance = new OSLog(subsystem: "subsystem", category: "category");
//...
public class SomeClass
{
public void SomeMethod()
{
AppDelegate.LoggerInstance?.Log(OSLogLevel.Debug, "log message");
// ...
}这将在设备日志中打印一条相当不错的消息,其中包含时间戳,并显示指定的类别。
https://stackoverflow.com/questions/52429007
复制相似问题