如何禁用Android ORMLite日志?microlog导致设置失效问题
我之前也踩过这个坑!当ORMLite实际用的是com.google.code.microlog4android.Logger而非默认的AndroidLog时,System.setProperty(LocalLog.LOCAL_LOG_LEVEL_PROPERTY, "ERROR")确实完全没用——因为microlog有一套自己的配置逻辑,根本不会读取系统属性里的日志级别设置。
关于ORMLite使用microlog的原因
没错,这和你项目里引入了microlog4android组件直接相关。ORMLite本身默认适配的是Android自带的Log系统或者LocalLog,但它有一套日志实现的自动发现机制:如果classpath里存在microlog的类,它就会自动切换到用这个组件来输出日志。所以大概率是你的项目依赖树里不小心引入了这个库(可能是某个第三方库间接带进来的)。
几种可行的解决方案
方案一:移除microlog4android依赖(最省心)
如果你的项目本身不需要用这个日志组件,直接在依赖管理里排除它就行。比如用Gradle的话,可以这么配置:implementation('com.j256.ormlite:ormlite-android:5.1') { exclude group: 'com.google.code.microlog4android' }排除后ORMLite会自动回退到默认的AndroidLog实现,之前的
System.setProperty方法就能正常生效了。方案二:给microlog单独配置日志级别
如果你的项目确实需要保留microlog4android,那就得按照它的规则来配置。在res/raw目录下创建一个microlog.properties文件,写入以下内容:# 全局设置为ERROR级别 microlog.level=ERROR # 指定用Android的Log输出 microlog.appender=com.google.code.microlog4android.appender.AndroidLogAppender要是只想针对ORMLite做限制,可以更精准:
# 仅将ORMLite的日志级别设为ERROR microlog.logger.com.j256.ormlite=ERROR方案三:自定义ORMLite日志实现(最灵活)
如果你想彻底掌控ORMLite的日志输出,完全可以自己写一个日志实现类,然后在App启动时替换掉默认的:LoggerFactory.setLoggerCreator(new LoggerFactory.LoggerCreator() { @Override public Logger createLogger(String className) { // 这里直接返回一个空实现,完全禁用ORMLite日志 return new Logger() { @Override public boolean isLevelEnabled(Level level) { return false; } @Override public void log(Level level, String msg) { // 什么都不做 } @Override public void log(Level level, String msg, Throwable throwable) { // 什么都不做 } }; } });这种方式不管ORMLite默认用什么日志组件,都会被你的自定义实现覆盖,完全不受外部依赖影响。
内容的提问来源于stack exchange,提问作者mianlaoshu

