自定义输出日志

本文介绍了一种自定义日志输出的方法,通过在Objective-C和Swift中使用宏定义和函数,可以方便地记录文件名、函数名及行号等信息,便于在大型项目中定位问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统的输出函数NSLog()输出只能单单输出内容,当项目比较大,文件比较多时,有时在项目中打印的一些记录我们很难分清它是出自哪里的,当然我们可以在打印时自己添加一些辅助代码比如:__func__,__LINE__,但是每次都这样添加太麻烦了,刚刚在网上搜集了一些资料,然后自己组合了一下,感觉效果还可以,拿出来和大家分享一下
推荐下面代码直接复制到PCH中


Object-C版:

//自定义日志输出
#ifdef DEBUG
#define MyLog(fmt, ...) NSLog((@"[fileName:%@] func:%s [Line %d] " fmt),[[NSString stringWithUTF8String:__FILE__] lastPathComponent],__PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define MyLog(...)
#endif

解释一下
__func__   方法名
__LINE__  行号
[[NSString stringWithUTF8String:__FILE__] lastPathComponent]  文件名

Swift版如下:

//MARK:定义日志输出函数
func printLog<T>(message: T, file: String = #file, method: String = #function, line: Int = #line) {
    //release时将会成为空方法,新版LLVM编译器将会略掉该方法
//    #if DEBUG //这行代码有时候不起作用,目前不清楚是什么原因,但是可以忽略,不影响使用
        print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)")
//    #endif
}

 

转载于:https://my.oschina.net/dahuilang123/blog/682190

<think>嗯,用户问的是GlusterFS自定义日志输出。首先我得回忆一下GlusterFS的日志系统。GlusterFS默认的日志路径在/var/log/glusterfs/,不同的组件有不同的日志文件,比如bricks、nfs、geo-replication等。用户可能需要调整日志级别或者改变输出方式,比如输出到syslog或者自定义文件。 接下来,自定义日志的方法可能有几种。首先想到的是修改glusterd的配置文件,通常是/etc/glusterfs/glusterd.vol。里面可以设置log-level和log-file参数。例如,log-level可以设置为DEBUG、INFO、WARNING等,而log-file可以指定路径。不过要注意权限问题,确保GlusterFS有权限写入指定的日志文件。 然后,动态调整日志级别的方法,用户可能不想重启服务。这时候可以用gluster volume set命令,比如设置diagnostics.brick-log-level为DEBUG,这样就能实时调整日志级别,方便调试。 另外,日志模块化方面,GlusterFS的不同模块可能有不同的日志设置。比如针对客户端、服务端或者特定的功能模块,用户可以单独调整它们的日志级别,这样可以减少不必要的日志输出,只关注特定模块的信息。 还有日志轮转的问题,默认的logrotate配置可能需要用户自定义,特别是当日志文件很大或者需要保留更长时间时。用户需要编辑/etc/logrotate.d/glusterfs,调整参数如rotate、size等。 用户的需求可能是在生产环境中调试问题,或者需要将日志集成到现有的日志管理系统中,比如ELK。这时候可能需要将日志输出到syslog,方便集中管理。修改配置文件,添加syslog参数,比如log-file syslog,这样日志就会通过syslog传输。 另外,用户可能遇到日志文件过多或者过大的问题,需要指导如何合理配置日志轮转和级别,避免磁盘空间被占满。同时,权限问题也是常见的,特别是自定义日志路径时,GlusterFS进程的用户是否有写入权限。 还需要考虑不同版本的GlusterFS在日志配置上的差异,确保提供的方法适用于用户使用的版本。例如,某些参数可能在旧版本中不可用,或者命令有所变化。 最后,给出一个示例配置会更有帮助,比如在glusterd.vol中添加log-level和log-file的配置,并说明如何验证配置是否生效,比如查看日志文件是否有新内容,或者使用gluster volume info命令检查日志级别设置。 总结一下,用户可能需要自定义日志输出路径、调整日志级别、集成到日志管理系统,以及管理日志轮转。需要分步骤说明这些方法,并提醒注意事项,比如权限、版本差异和服务重启的影响。</think>GlusterFS自定义日志输出可通过以下方式实现: 1. 配置文件调整 - 核心配置文件路径:`/etc/glusterfs/glusterd.vol` - 关键参数设置示例: ```xml volume management type mgmt/glusterd option log-level DEBUG # 日志等级:TRACE/DEBUG/INFO/WARNING/ERROR/CRITICAL option log-file /var/log/glusterfs/custom.log # 自定义日志路径 option transport-type socket ... end-volume ``` 2. 动态调整日志等级(无需重启) ```bash gluster volume set <VOLNAME> diagnostics.brick-log-level DEBUG # 设置brick日志级别 gluster volume set <VOLNAME> diagnostics.client-log-level WARNING # 设置客户端日志级别 ``` 3. 模块化日志配置 ```bash glusterd --modules='-mgmt' --log-file=/var/log/glusterfs/mgmt.log # 单独设置管理模块日志 ``` 4. Syslog集成配置 在配置文件中添加: ```xml option log-file syslog # 输出到系统日志 option syslog-facility LOCAL0 # 指定syslog facility option syslog-ident gluster-custom # 自定义日志标识 ``` 5. 日志轮转配置(/etc/logrotate.d/glusterfs)示例: ``` /var/log/glusterfs/*.log { daily rotate 30 compress delaycompress missingok sharedscripts postrotate /usr/bin/killall -HUP glusterfs glusterfsd 2> /dev/null || true endscript } ``` 注意事项: 1. DEBUG级别会产生大量日志,建议仅在调试时启用 2. 自定义日志路径需确保目录存在且glusterfs进程有写入权限 3. 修改配置文件后需重启glusterd服务生效 4. 不同组件(brick/client/quota等)支持单独配置日志级别 验证方法: ```bash # 查看实时日志 tail -f /var/log/glusterfs/custom.log # 检查当前日志配置 gluster volume info <VOLNAME> | grep diagnostics ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值