gpt4 book ai didi

ios - 如何在 swift-ios 文件中使用 asl.h

转载 作者:搜寻专家 更新时间:2023-10-30 22:10:01 24 4
gpt4 key购买 nike

我是 ios/swift 的新手。我想使用 asl.h 中的日志记录 c 函数在快速文件中。任何人?我用谷歌搜索,人们似乎在编写自己的日志记录快速类。没有不敬,但我只想使用 asl。也就是swift不喜欢 #include <asl.h>它不喜欢我只是调用asl_log(NULL, NULL, ASL_LEVEL_INFO, "Hello World!");

最佳答案

谢谢,并在 http://doing-it-wrong.mikeweller.com/2012/07/youre-doing-it-wrong-1-nslogdebug-ios.html 的帮助下我做了以下修改:

在项目中添加了一个 BRASL.h 文件,内容如下:

//
// BRASL.h
//

#ifndef BRASL_h
#define BRASL_h

#import <asl.h>
#import <Foundation/Foundation.h>


// Define which loglevel is necessary for deployment and development
// =================================================================
// Used to conditionally implement the log functions. All log
// functions are defined so the compiler does not complain. But only
// those logfunctions that are used will contain code.
// =================================================================
#ifndef BRASL_LOG_LEVEL
// DEBUG is set in the project build-settings
#if DEBUG == 1
// Set logging level for development
#define BRASL_LOG_LEVEL ASL_LEVEL_DEBUG
#else
// Set logging level for deployment
#define BRASL_LOG_LEVEL ASL_LEVEL_NOTICE
#endif
#endif


// Define the log functions
// ========================
void aslEmergency(NSString *string);
void aslAlert(NSString *string);
void aslCritical(NSString *string);
void aslError(NSString *string);
void aslWarning(NSString *string);
void aslNotice(NSString *string);
void aslInfo(NSString *string);
void aslDebug(NSString *string);


#endif

然后添加相应的.m文件:

//
// BRASL.h
//

#import "BRASL.h"


// We need this to set asl up to also write the information to the debugger
// ========================================================================
static void AddStderrOnce() {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
asl_add_log_file(NULL, STDERR_FILENO);
});
}


// Implement the log functions where necessary
// ===========================================
#if BRASL_LOG_LEVEL >= ASL_LEVEL_EMERG
void aslEmergency(NSString *string) {
AddStderrOnce();
asl_log(NULL, NULL, ASL_LEVEL_EMERG, "%s", [string UTF8String]);
}
#else
void aslEmergency(NSString *string) {}
#endif

#if BRASL_LOG_LEVEL >= ASL_LEVEL_ALERT
void aslAlert(NSString *string) {
AddStderrOnce();
asl_log(NULL, NULL, ASL_LEVEL_ALERT, "%s", [string UTF8String]);
}
#else
void aslAlert(NSString *string) {}
#endif

#if BRASL_LOG_LEVEL >= ASL_LEVEL_CRIT
void aslCritical(NSString *string) {
AddStderrOnce();
asl_log(NULL, NULL, ASL_LEVEL_CRIT, "%s", [string UTF8String]);
}
#else
void aslCritical(NSString *string) {}
#endif

#if BRASL_LOG_LEVEL >= ASL_LEVEL_ERR
void aslError(NSString *string) {
AddStderrOnce();
asl_log(NULL, NULL, ASL_LEVEL_ERR, "%s", [string UTF8String]);
}
#else
void aslError(NSString *string) {}
#endif

#if BRASL_LOG_LEVEL >= ASL_LEVEL_WARNING
void aslWarning(NSString *string) {
AddStderrOnce();
asl_log(NULL, NULL, ASL_LEVEL_WARNING, "%s", [string UTF8String]);
}
#else
void aslWarning(NSString *string) {}
#endif

#if BRASL_LOG_LEVEL >= ASL_LEVEL_NOTICE
void aslNotice(NSString *string) {
AddStderrOnce();
asl_log(NULL, NULL, ASL_LEVEL_NOTICE, "%s", [string UTF8String]);
}
#else
void aslNotice(NSString *string) {}
#endif

#if BRASL_LOG_LEVEL >= ASL_LEVEL_INFO
void aslInfo(NSString *string) {
AddStderrOnce();
asl_log(NULL, NULL, ASL_LEVEL_INFO, "%s", [string UTF8String]);
}
#else
void aslInfo(NSString *string) {}
#endif

#if BRASL_LOG_LEVEL >= ASL_LEVEL_DEBUG
void aslDebug(NSString *string) {
AddStderrOnce();
asl_log(NULL, NULL, ASL_LEVEL_DEBUG, "%s", [string UTF8String]);
}
#else
void aslDebug(NSString *string) {}
#endif

当然还有桥接文件

//
// Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "BRASL.h"

然后在我的 swift 代码中我可以使用例如:

aslInfo("Initializing managed object context")

到目前为止一切顺利,似乎像宣传的那样有效:)

关于ios - 如何在 swift-ios 文件中使用 asl.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26685219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com