- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
随着项目的发展,我正努力让代码调试变得容易。我讨厌添加和删除打印或调试语句(为什么不把它们留在里面?)问题是输出变得难以阅读。我正在尝试能够在不同的文件和级别中设置日志记录,以便我可以通过 logging.conf 配置文件打开或关闭它。
这是我的代码:
import logging.config
logging.config.fileConfig('logging.conf')
if __name__ == "__main__":
one = logging.getLogger("oneLogger")
two = logging.getLogger("twoLogger")
one.debug("debug on one")
one.info("info on one")
one.warn("warn on one")
one.error("error on one")
one.critical("critical on one")
two.debug("debug on two")
two.info("info on two")
two.warn("warn on two")
two.error("error on two")
two.critical("critical on two")
这是我的 logging.conf 文件:
[loggers]
keys=root,oneLogger, twoLogger
[handlers]
keys=rootHandler, oneHandler, twoHandler
[formatters]
keys=rootFormatter,oneFormatter, twoFormatter
[logger_root]
level=DEBUG
handlers=rootHandler
[logger_oneLogger]
level=DEBUG
handlers=oneHandler
qualname=main
propagate=1
[logger_twoLogger]
level=CRITICAL
handlers=twoHandler
qualname=main
propagate=1
[handler_rootHandler]
class=StreamHandler
formatter=rootFormatter
args=(sys.stdout,)
[handler_oneHandler]
class=StreamHandler
formatter=oneFormatter
args=(sys.stdout,)
[handler_twoHandler]
class=StreamHandler
formatter=twoFormatter
args=(sys.stdout,)
[formatter_rootFormatter]
format=Root: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
[formatter_oneFormatter]
format=One: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
[formatter_twoFormatter]
format=Two: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
我会期望这样的输出:
One: 2016-12-22 16:36:32,414 - one - DEBUG - debug on one
One: 2016-12-22 16:36:32,414 - one - INFO - info on one
One: 2016-12-22 16:36:32,415 - one - WARNING - warn on one
One: 2016-12-22 16:36:32,417 - one - ERROR - error on one
One: 2016-12-22 16:36:32,417 - one - CRITICAL - critical on one
Two: 2016-12-22 16:36:32,421 - two - CRITICAL - critical on two
相反,我得到了这个:
Root: 2016-12-22 16:36:32,414 - one - DEBUG - debug on one
Root: 2016-12-22 16:36:32,414 - one - INFO - info on one
Root: 2016-12-22 16:36:32,415 - one - WARNING - warn on one
Root: 2016-12-22 16:36:32,417 - one - ERROR - error on one
Root: 2016-12-22 16:36:32,417 - one - CRITICAL - critical on one
Root: 2016-12-22 16:36:32,418 - two - DEBUG - debug on two
Root: 2016-12-22 16:36:32,418 - two - INFO - info on two
Root: 2016-12-22 16:36:32,420 - two - WARNING - warn on two
Root: 2016-12-22 16:36:32,421 - two - ERROR - error on two
Root: 2016-12-22 16:36:32,421 - two - CRITICAL - critical on two
我原以为记录器二将仅限于关键日志,而记录器一将接受所有日志。相反,我惊讶地看到根记录器处理了所有日志。
我在做什么/假设错了什么?
最佳答案
明白了。似乎“qualname”是我要找的,而不是记录器本身的名称:
这是我的代码:
import logging.config
logging.config.fileConfig('logging.conf')
if __name__ == "__main__":
one = logging.getLogger("one.oneLogger")
one.debug("debug on one")
one.info("info on one")
one.warn("warn on one")
one.error("error on one")
one.critical("critical on one")
two = logging.getLogger("two")
two.debug("debug on two")
two.info("info on two")
two.warn("warn on two")
two.error("error on two")
two.critical("critical on two")
root = logging.getLogger()
root.debug("debug on root")
root.info("info on root")
root.warn("warn on root")
root.error("error on root")
root.critical("critical on root")
这是我的 logging.conf 文件:
[loggers]
keys:root,twoLogger,oneLogger
[handlers]
keys:rootHandler,oneHandler,twoHandler
[formatters]
keys:rootFormatter,oneFormatter,twoFormatter
[logger_root]
level:DEBUG
handlers:rootHandler
[logger_oneLogger]
level:WARN
handlers:oneHandler
qualname:one
propagate:0
[logger_twoLogger]
level:CRITICAL
handlers:twoHandler
qualname:two
propagate:0
[handler_rootHandler]
class:StreamHandler
formatter:rootFormatter
args:(sys.stdout,)
[handler_oneHandler]
class:StreamHandler
formatter:oneFormatter
args:(sys.stdout,)
[handler_twoHandler]
class:StreamHandler
formatter:twoFormatter
args:(sys.stdout,)
[formatter_rootFormatter]
format:Root: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt:
[formatter_oneFormatter]
format:One: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt:
[formatter_twoFormatter]
format:Two: %(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt:
这是我的输出:
One: 2016-12-24 12:46:14,244 - one.oneLogger - WARNING - warn on one
One: 2016-12-24 12:46:14,246 - one.oneLogger - ERROR - error on one
One: 2016-12-24 12:46:14,246 - one.oneLogger - CRITICAL - critical on one
Two: 2016-12-24 12:46:14,247 - two.twoLogger - CRITICAL - critical on two
Root: 2016-12-24 12:46:14,249 - root - DEBUG - debug on root
Root: 2016-12-24 12:46:14,249 - root - INFO - info on root
Root: 2016-12-24 12:46:14,250 - root - WARNING - warn on root
Root: 2016-12-24 12:46:14,250 - root - ERROR - error on root
Root: 2016-12-24 12:46:14,252 - root - CRITICAL - critical on root
关于python - 在 Python 的 logging.conf 中设置日志级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291883/
不同的 LogCat 方法是: Log.v(); // Verbose Log.d(); // Debug Log.i(); // Info Log.w(); // Warning Log.e();
在android群里,经常会有人问我,android log是怎么用的,今天我就把从网上以及sdk里东拼西凑过来,让大家先一睹为快,希望对大家入门android log有一定的帮助. android
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 社区 12
我正在尝试使用 sonarlint 检查代码质量.上面的问题概要,我不明白为什么它要说要大写。但是 this discussion与上述建议相反。哪一个应该被认为是正确的? 最佳答案 这没有正确答案,
随着 n 变大,log*(log n) 和 log(log* n) 这两个函数会更快吗? 这里,log* 函数是迭代对数,定义如下: 我怀疑它们是相同的,只是写法不同,但它们之间有什么区别吗? 最佳答
作为家庭作业,我被要求在 O(log(n)) 中编写一个算法,我可以计算出我编写的算法的复杂度为 O(log(n) + log(n/2) + log(n/4) + log(n/8) + ... + l
我正在使用 Tomee。日志文件夹包含这样的文件 localhost_access_log.2016-12-02.txt localhost.2016-12-02.log catalina.2016-
Android Log.v、Log.d、Log.i、Log.e 等的 ios 等效项是什么?同样在 android 上,我使用 Android 设备监视器和 logcat 来访问我的手机日志,我需要在
我认为下面的代码是 O(log log n) 因为它里面有 i*i 但我对 log n 感到困惑> 和 log (log n)。 for (i=2; i*i<=number; i++) { if
我正在修改 kvm 模块,并在内核代码中添加了 printk 语句。运行虚拟机后,printk 为我提供了错误地址和有关 guest 操作系统的其他信息。 我需要从这个信息中生成统计信息。当我使用 d
我有一个部署为 Windows Azure Web 角色的 WCF 服务。 我正在使用 Enterprise Library 进行异常处理,并且在我的本地 Development Fabric 中,似
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
在 Go 的生产中使用 log.SetFlags(log.LstdFlags | log.Lshortfile) 是好的做法(至少是一般做法)吗?我想知道在生产中这样做是否存在性能或安全问题。因为它不
我想知道什么更快: double value = Math.log(a) - Math.log(b); 或 double value = Math.log(a/b); 我计算值的方式是否会对性能产生影
我有数百个子例程使用 log.Println() 写入日志文件 我正在使用 log.Println 写入 error.log 文件。 func main() { e, err := os.Open
我将 Nuxt 与 SSR 一起使用,并希望有类似于 apaches 的 access.log 和 error.log 的东西 我特别感兴趣的是每次调用的响应时间。 我在 nuxt 文档中找不到任何内
我知道以前有人问过这个问题,但我相信这是一个不同的问题。 Nginx 在 www-data 下运行: $ ps -eo "%U %G %a" | grep nginx root root
我在我的日志文件中发现了一个非常奇怪的条目 Jan 29 01:35:30 vs-proj-handy sshd[5316]: Received disconnect from 130.207.203
对于我正在开发的应用程序,我希望在开发过程中和发布时简化故障排除。我希望能够检索到对 Log 的调用,以了解在 USB 调试中没有连接手机的情况下运行应用程序时的调用,以便可以检索并发送给我。例如,当
我试图捕获 panic 并记录错误: func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloRep
我是一名优秀的程序员,十分优秀!