首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Xamarin中使用iOS OSLog?

如何在Xamarin中使用iOS OSLog?
EN

Stack Overflow用户
提问于 2018-09-20 23:58:07
回答 2查看 1K关注 0票数 3

如何在Xamarin.iOS中使用iOS OSLog

我确实成功地使用了NSLog,如下所示,但是我看不到使用NSLog设置子系统(设置为包标识符)的方法,这样我就可以使用它来过滤Console.app中的日志。

代码语言:javascript
复制
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
    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-09-21 01:55:43

OSLog是一个ObjC结构(包含两个常量字符),并提供了一个内核方法os_log_create来分配一个常量字符。

注:有关详细信息,请参阅os/log.h

定义:

代码语言:javascript
复制
[DllImport("__Internal", EntryPoint = "os_log_create")]
public static extern IntPtr os_log_create(string subsystem, string category);

用法:

代码语言:javascript
复制
var oslog = os_log_create("some.bundle.id", "StackOverflowCategory");

仅供参考:你的NSLog应该包含一个打印格式的字符串作为NSString

代码语言:javascript
复制
[DllImport (Constants.FoundationLibrary, EntryPoint = "NSLog")]
extern static void NSLog (IntPtr format, [MarshalAs (UnmanagedType.LPStr)] string s);
票数 3
EN

Stack Overflow用户

发布于 2020-05-23 04:55:43

Xamarin.iOS中,有一个名为Default的静态CoreFoundation.OSLog对象,用户可以直接使用它,它将使用指定的OSLogLevel参数记录消息,如OSLogLevel.DebugOSLogLevel.Error等。您可以在Xamarin.iOS代码中使用一个在Debug级别记录消息的方法:

代码语言:javascript
复制
using CoreFoundation;
// ...

public void Write(string message)
{
    OSLog.Default.Log(OSLogLevel.Debug, message);
}

如果要使用子系统和类别,则必须使用适当的构造函数实例化一个OSLog实例,并使用该实例记录您的消息。您可能希望保存对创建的实例的静态引用,并像使用OSLog.Default一样使用它。

代码语言:javascript
复制
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");
        // ...
    }

这将在设备日志中打印一条相当不错的消息,其中包含时间戳,并显示指定的类别。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52429007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档