一个很强大的LOG开关

1、API亮点:

API可以实现不更换APK,在出问题的手机上就直接能抓到有效log,能提升不少工作效率。

2API介绍

最近在解决短信问题时,看到一个很强大的LOG开关---Log.isLoggable

1. if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) {  

2.     Log.v(TAG, "Creating TransactionService");  

3. }  

 进入framework中查看isLoggable方法的定义,发现这是一个用了JNI的方法。不过方法声明上有很多注释。仔细看了下,发现这是android给大家的一个礼物。
原文大致意思:检查当前的tag是否在指定的log级别。一般默认的log级别是INFO,这也就意味着在这之上包括INFOlog都会被输出。你可以通过设置系统属性修改默认的log级别,执行如下命令即可:

1. setprop log.tag.;YOUR_LOG_TAG> ;LEVEL  

你也开可以将这句代码写进local.prop文件里面,并且将这个文件放到/data/local.prop。根据上面的指导,试着执行下下面的命令:

1. adb shell setprop log.tag.Mms:transaction VERBOSE  

接着发了一条彩信试验,有效log都输出来了。

       我们在这个基础上在进行一些挖掘,看看google还给我们留了哪些惊喜。从上面第二段代码中的LogTag.TRANSACTION,可以看到Mms的包里面有个LogTag.java文件,发现里面果然声明了不少常量:

1. public static final String TRANSACTION = "Mms:transaction";  

2. public static final String APP = "Mms:app";  

3. public static final String THREAD_CACHE = "Mms:threadcache";  

4. public static final String THUMBNAIL_CACHE = "Mms:thumbnailcache";  

5. public static final String PDU_CACHE = "Mms:pducache";  

6. public static final String WIDGET = "Mms:widget";  

7. public static final String CONTACT = "Mms:contact";  

这一个个都是彩信里面重要log开关。知道了这些以后调试彩信就方便多了,不用换APK,在出问题的手机上就直接能抓到有效log,能提升不少工作效率。我们接着载回去看看isLoggable(Stringtag, int level)在哪里有调用,发现除了framework层和Mms应用,还有Contacts等重要模块有调用,以后调试这些模块都会方便很多。

<think>我们被要求回答如何在Python中启用或禁用日志记录功能。根据用户的问题,我们需要提供清晰的步骤和示例代码。参考之前的引用,并没有直接关于Python日志的记录,但我们可以根据标准库的知识来回答。Python的标准库`logging`提供了强大的日志记录功能。我们可以通过配置日志记录器来启用或禁用日志。步骤:1.导入logging模块。2.使用`basicConfig`进行基本配置(可选,但通常用于设置日志级别和格式)。3.获取或创建日志记录器(logger)。4.设置日志记录器的级别,以启用或禁用相应级别的日志。日志级别(从低到高):DEBUG,INFO,WARNING, ERROR, CRITICAL。设置级别后,只有级别大于等于该级别的日志消息才会被处理。禁用日志的几种方法: -将日志级别设置为`CRITICAL`(这样只有CRITICAL级别的日志会被记录)或者更高的级别(实际上没有比CRITICAL更高的级别,所以设置成CRITICAL意味着只记录CRITICAL)。-使用`logging.disable(level)`函数,它会禁止所有级别低于或等于`level`的日志记录。如果设置`logging.disable(logging.CRITICAL)`,则所有日志(包括CRITICAL)都会被禁用。-将日志记录器的`disabled`属性设置为True。示例:启用日志(例如,设置级别为DEBUG,将记录所有级别的日志): ```pythonimport logginglogging.basicConfig(level=logging.DEBUG,format='%(asctime)s -%(name)s- %(levelname)s- %(message)s')logger =logging.getLogger('my_logger') logger.debug('This willget logged') ```禁用日志(通过设置级别): ```pythonimport logginglogging.basicConfig(level=logging.CRITICAL)#只记录CRITICAL及以上级别#或者logging.disable(logging.CRITICAL)#禁用所有CRITICAL及以下级别的日志(即所有日志)```临时禁用某个记录器: ```pythonlogger =logging.getLogger('my_logger') logger.disabled= True```注意:`logging.disable()`是全局的,会影响所有记录器。而设置记录器的`disabled`属性只影响该记录器。另外,我们可以通过设置日志级别为`logging.NOTSET`(但通常记录器会继承根记录器的级别)或者重新启用日志。重新启用:如果使用`logging.disable()`,可以传入一个比当前禁用的级别更高的级别(比如`logging.INFO`)来部分启用,或者使用`logging.disable(logging.NOTSET)`来完全重新启用(因为`NOTSET`是0,所以相当于不禁用)。但注意:`logging.disable()`实际上设置了一个全局阈值,所有日志记录只有高于这个阈值的才会被处理。设置`logging.disable(logging.NOTSET)`即可取消这个全局阈值。示例:重新启用```python#先禁用logging.disable(logging.CRITICAL)#然后重新启用(取消禁用) logging.disable(logging.NOTSET)```总结:启用日志:设置合适的日志级别(例如`logging.DEBUG`)或取消禁用。禁用日志:设置高日志级别(如`logging.CRITICAL`)或使用`logging.disable()`,或设置记录器的`disabled`属性。下面我们提供一个完整的示例,展示如何启用和禁用日志。</think>### 如何在 Python 中启用/禁用日志记录 在 Python 中,`logging` 模块提供了灵活的日志管理功能。以下是启用和禁用日志记录的几种常用方法: #### 1. **通过日志级别控制** 日志级别从低到高分为:`DEBUG` < `INFO` < `WARNING` < `ERROR` < `CRITICAL`。设置级别后,仅记录该级别及更高级别的日志。 **启用日志**(记录所有级别): ```python import logging logging.basicConfig(level=logging.DEBUG) # 启用所有日志 logging.debug("调试信息") # 将输出 ``` **禁用日志**(仅记录最高级别): ```python logging.basicConfig(level=logging.CRITICAL) # 仅记录严重错误 logging.warning("警告信息") # 不会输出 ``` #### 2. **全局禁用所有日志** 使用 `logging.disable()` 可全局禁用指定级别及以下的所有日志: ```python logging.disable(logging.CRITICAL) # 禁用所有日志 logging.error("错误信息") # 不会输出 ``` 若要重新启用: ```python logging.disable(logging.NOTSET) # 取消禁用 ``` #### 3. **禁用特定记录器** 针对特定记录器(非全局): ```python logger = logging.getLogger("my_logger") logger.disabled = True # 禁用该记录器 logger.info("信息") # 不会输出 ``` #### 4. **临时禁用日志输出** 使用上下文管理器临时关闭日志: ```python from contextlib import contextmanager @contextmanager def disable_logging(): logging.disable(logging.CRITICAL) yield logging.disable(logging.NOTSET) with disable_logging(): logging.warning("临时禁用期间") # 不会输出 ``` #### 5. **通过配置文件控制** 在 `logging.conf` 配置文件中设置: ```ini [logger_root] level=CRITICAL # 禁用低级别日志 handlers=console ``` 加载配置: ```python logging.config.fileConfig("logging.conf") ``` ### 关键概念 - **日志级别**:控制记录详细程度的核心参数 - **记录器 (Logger)**:每个模块可独立配置 - **处理器 (Handler)**:决定日志输出位置(文件/控制台等) - **格式化器 (Formatter)**:定制日志输出格式 > **最佳实践**:生产环境中建议使用 `INFO` 或 `WARNING` 级别;调试时使用 `DEBUG`;完全禁用日志可能隐藏关键错误,建议保留 `ERROR` 级别以上日志[^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值