Logger 基本用法

本文详细介绍了一个为Android设计的Logger库的使用方法,包括其基本功能、日志保存配置及个性化设置等。通过此库,开发者可以轻松实现日志记录、格式化及文件保存等功能。

Logger 基本用法

简介

Simple, pretty and powerful logger for android
为Android提供的,简单、强大而且格式美观的工具

本质就是封装系统提供的Log类,加上一些分割线易于查找不同的Log;logcat中显示的信息可配置。最初的样子如下图


包含线程信息、Log所在的类、方法及所在行数。

这里我忍不住了,就先写了我最喜欢的功能,嘎嘎嘎~~
最最最基本的依赖和简单打印在第二页

我觉得最好的功能是:Logger支持设置日志保存到本地,这样的话就可以想上传上传了。做自己的日志管理系统倍爽!
不过日志保存的位置写死了。找位置的方法是
在Logger包里的 DiskLogAdapter类的构造函数,进入build()方法里。

public DiskLogAdapter() {
    formatStrategy = CsvFormatStrategy.newBuilder().build();
}

进入build(),就可以找到相应的路径

@NonNull public CsvFormatStrategy build() {
  if (date == null) {
    date = new Date();
  }
  if (dateFormat == null) {
    dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS", Locale.UK);
  }
  if (logStrategy == null) {
    //地址在这里
    String diskPath = Environment.getExternalStorageDirectory().getAbsolutePath();
    String folder = diskPath + File.separatorChar + "logger";
    HandlerThread ht = new HandlerThread("AndroidFileLogger." + folder);
    ht.start();
    Handler handler = new DiskLogStrategy.WriteHandler(ht.getLooper(), folder, MAX_BYTES);
    logStrategy = new DiskLogStrategy(handler);
  }
  return new CsvFormatStrategy(this);
}

具体路径是:/storage/emulated/0/logger
每个文件最大为500K,源码贴出来~~~~
private static final int MAX_BYTES = 500 * 1024; // 500K averages to a 4000 lines per file

生成的文件名称为logs_0.csv 后面的数字会递增 源码贴出来~~~~
newFile = new File(folder, String.format("%s_%s.csv", fileName, newFileCount));


刚用markDown不太会用


我最喜欢的部分写完了,下面写点常规的操作吧。simple

一、依赖Logger

地址:https://github.com/orhanobut/logger
本来不想贴地址呢,github是个好东西,介于我两天前还不会用github,还是贴上吧,啦啦啦,我是莉莉的小叮当
github上介绍很详细了,但是我还是想粘贴一遍。

依赖
dependencies {
    implementation 'com.orhanobut:logger:2.2.0'
}
初始化
Logger.addLogAdapter(new AndroidLogAdapter());

到这里Logger已经可以用了
Logger.d(“debug”);
Logger.e(“error”);
Logger.w(“warning”);
Logger.v(“verbose”);
Logger.i(“information”);
Logger.wtf(“What a Terrible Failure”);

下面写点我自己的Logger用法

    val formatStrategy = PrettyFormatStrategy.newBuilder()
          .showThreadInfo(true)  //(可选)是否显示线程信息。 默认值为true
          .methodCount(1)         // (可选)要显示的方法行数。 默认2
          .methodOffset(5)        // (可选)隐藏内部方法调用到偏移量。 默认5
          .tag("doShare")//(可选)每个日志的全局标记。 默认PRETTY_LOGGER
          .build()
    Logger.addLogAdapter(AndroidLogAdapter(formatStrategy))//根据上面的格式设置logger相应的适配器
    Logger.addLogAdapter(DiskLogAdapter())//保存到文件
<think>嗯,用户想了解如何在Python中使用logging模块的logger方法。首先,我需要回忆一下logging模块的基本结构。记得logging模块有四大组件:logger、handler、filter、formatter。其中logger是用户直接交互的部分,用来记录日志的。 用户提到的logger方法可能是指如何获取和配置logger对象。根据引用[4],通常使用logging.getLogger()方法来获取logger实例,而不是直接实例化Logger类。那应该先解释这个方法的作用,比如传入名字参数,相同名字返回同一个实例,这样可以实现模块化的日志管理。 接下来,需要分步骤说明如何使用。首先是导入模块,然后获取logger对象。例如,logger = logging.getLogger('example')。然后需要配置日志级别,比如logger.setLevel(logging.DEBUG)。然后要添加handler,比如控制台的StreamHandler或者文件的FileHandler。每个handler可能需要设置自己的级别和格式。 格式方面,formatter可以使用logging.Formatter来定义日志输出的格式,比如时间、logger名、级别、消息。然后把这个formatter添加到handler,再把handler添加到logger。这样logger就可以用不同handler输出到不同地方了。 然后需要说明记录日志的方法,比如logger.debug(), logger.info()等,不同级别对应不同的方法。还要注意日志级别的重要性,比如如果logger的级别设为WARNING,那么DEBUG和INFO级别的消息不会被处理。 可能还要提到避免创建过多logger的方式,使用命名空间来组织,比如用__name__作为名字,这样可以继承父模块的配置。这也是引用[4]中提到的模块化日志管理的好处。 另外,引用[2]和[3]提到在自动化测试和大数据分析中的应用,可以举例说明在这些场景下如何有效使用logger,比如在测试框架中记录错误,或者将日志导入分析系统。 需要确保步骤清晰,先导入模块,创建logger,配置级别,添加handler和formatter,然后记录日志。最后给出完整的代码示例,让用户能直接复制使用。同时要提醒常见问题,比如多次添加handler导致重复日志,或者级别设置不当导致日志不显示。 可能用户还会疑惑为什么不用basicConfig,但根据引用[4],getLogger()更适合模块化应用,而basicConfig适用于简单场景。所以需要比较两者的区别,帮助用户理解何时使用哪种方法。 总结来说,回答的结构应该是先介绍logger方法的作用,然后分步骤详细说明配置过程,给出代码示例,最后注意事项和应用场景。同时结合引用中的内容,强调模块化管理和不同组件的协作。</think>在Python中使用logging模块的`logger`方法需遵循以下步骤,通过模块化方式实现灵活、可扩展的日志管理: ### 一、创建Logger对象 1. **导入模块** ```python import logging ``` 2. **获取Logger实例** 使用`logging.getLogger(name)`方法创建或获取Logger对象。推荐使用`__name__`参数实现模块化日志管理[^4]: ```python logger = logging.getLogger(__name__) # 通常以模块名为标识 ``` --- ### 二、配置日志处理 #### 1. 设置日志级别 ```python logger.setLevel(logging.DEBUG) # 设置最低记录级别(DEBUG < INFO < WARNING < ERROR < CRITICAL) ``` #### 2. 添加处理器(Handler) 常用处理器类型: - **控制台输出** ```python console_handler = logging.StreamHandler() console_handler.setLevel(logging.WARNING) # 控制台仅显示WARNING及以上级别 ``` - **文件输出** ```python file_handler = logging.FileHandler('app.log') file_handler.setLevel(logging.DEBUG) # 文件记录所有DEBUG及以上级别 ``` #### 3. 定义日志格式 通过`Formatter`对象自定义输出格式: ```python formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) ``` #### 4. 绑定处理器 ```python logger.addHandler(console_handler) logger.addHandler(file_handler) ``` --- ### 三、记录日志 通过不同级别方法输出日志: ```python logger.debug('调试信息') # 记录详细运行状态 logger.info('常规信息') # 记录程序执行流程 logger.warning('警告信息') # 记录潜在问题 logger.error('错误信息') # 记录功能异常 logger.critical('严重错误') # 记录系统级故障 ``` --- ### 四、完整示例 ```python import logging # 创建Logger logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # 定义格式 formatter = logging.Formatter('%(asctime)s | %(levelname)-8s | %(message)s') # 控制台处理器 console_handler = logging.StreamHandler() console_handler.setLevel(logging.WARNING) console_handler.setFormatter(formatter) # 文件处理器 file_handler = logging.FileHandler('app.log') file_handler.setFormatter(formatter) # 添加处理器 logger.addHandler(console_handler) logger.addHandler(file_handler) # 使用示例 logger.info('服务启动') logger.warning('磁盘空间剩余10%') ``` --- ### 五、注意事项 1. **避免重复日志** 不要多次调用`addHandler()`添加相同处理器,否则会导致日志重复输出[^2] 2. **日志级别继承** 子Logger默认继承父Logger配置,可通过`logger.propagate = False`关闭 3. **性能优化** 高频日志场景建议使用`logging.handlers.RotatingFileHandler`实现日志轮转[^3] ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值