log 打印日志
打印日志对于软件开发、系统管理和安全管理具有关键作用,为问题排查、性能优化、安全审计、监控和历史记录提供了必要的信息和数据,尤其在大规模、复杂的应用程序和系统中,打印日志非常有必要。
Luwak也提供了丰富的日志打印功能,沿用log4j的用法。
日志级别
Luwak提供了log4j中的四种日志级别来控制日志记录的详细程度和输出。以下是由低到高的日志级别:
级别 | 方法 | 用途 |
---|---|---|
DEBUG(调试) | log.debug() | 用于记录调试信息,帮助开发人员诊断问题和跟踪代码执行过程。在开发和测试阶段使用此级别进行详细的日志记录。例如,luwak自动推导出来的sql(prepared statement),以及占位符绑定的值等。 |
INFO(信息) | log.info() | 用于记录程序的正常运行信息,例如应用程序启动、关键操作完成等。这是生产环境中默认启用的日志级别。 |
WARN(警告) | log.warn() | 用于记录可能会导致潜在问题的警告信息,但不影响程序继续运行的情况。例如,使用了过时的API、配置项缺失等。 |
ERROR(错误) | log.error() | 用于记录错误信息,表示程序遇到了可恢复的异常或错误情况。这些错误不会导致程序终止,但需要注意和处理。 |
通过在luwak的配置文件中设置日志级别,可以控制哪些级别的日志将被记录和输出。可以根据具体需求和场景,合理选择日志级别,以平衡日志量和信息的可读性。在生产环境中,通常会将日志级别设置为INFO或以上,以减少不必要的日志输出。
日志级别配置
在luwak的配置文件luwak.yaml中,level用于设置日志级别,目前支持debug和info两种级别。
配置如下:
log:
level: debug
file_path: log/luwak.log
max_size: 500 # megabytes It defaults to 100 megabytes
max_backups: 3 # The default is to retain all old log files
max_age: 28 # days, The default is not to remove old log files
compress: true # disabled by default
日志记录形式
// log.info(), log.warn(), log.error(), or log.debug()
log.info("--hello-world--", result, {"a":1,"b":2}, [1,2]);
日志级别配置和打印 日志间的关系
level设置的日志级别,会打印所有大于等于该级别的日志。例如设置为DEBUG,将会打印DEBUG及以上级别的日志,包括DEBUG,INFO,WARN, ERROR。同样,设置为ERROR,则只会打印ERROR日志。
级别 | 打印日志类型 |
---|---|
DEBUG | DEBUG, INFO, WARN, ERROR |
INFO | INFO, WARN, ERROR |
WARN | WARN, ERROR |
ERROR | ERROR |
示例
下面就以最常用的DEBUG和INFO级别为例,介绍其在luwak中的实际效果,其他级别就不一一介绍了,有兴趣的可以自己亲自动手试试。
DEBUG级别
level配置为debug
log:
level: debug
file_path: log/luwak.log
max_size: 500 # megabytes It defaults to 100 megabytes
max_backups: 3 # The default is to retain all old log files
max_age: 28 # days, The default is not to remove old log files
compress: true # disabled by default
JavaScript代码
// 以下日志是为了方便查看日志级别和打印日志之间关系设置的
log.debug("this is a debug log");
log.info("this is an info log");
log.warn("this is a warnning log");
log.error("this is an error log");
打印效果
打开log/luwak.log,看到打印内容如下
2023/10/26 13:53:22 DEBU js_log.go:62 this is a debug log
2023/10/26 13:53:22 INFO js_log.go:53 this is an info log
2023/10/26 13:53:22 WARN js_log.go:44 this is a warnning log
2023/10/26 13:53:22 ERRO js_log.go:35 this is an error log
2023/10/26 13:53:22 DEBU dao_util.go:50 SELECT c.emp_no, c.first_name, c.last_name, c.gender FROM hrm.employees c WHERE c.emp_no = ? LIMIT 1 - [10003] - 5.253776ms
2023/10/26 13:53:22 DEBU server.go:241 127.0.0.1 | HTTP/1.1 | POST /console/js_code - 200 - 7.035471ms | Apache-HttpClient/4.5.13 (Java/11.0.11)
可以看到,日志级别为DEBUG时,打印了DEBUG及以上级别的日志,包括DEBUG、INFO、WARN、ERROR。
INFO级别
将luwak的配置文件luwak.yaml中的log级别调整为info.
修改日志级别后需要重启luwak服务,否则不生效。
log:
level: info
file_path: log/luwak.log
max_size: 500 # megabytes It defaults to 100 megabytes
max_backups: 3 # The default is to retain all old log files
max_age: 28 # days, The default is not to remove old log files
compress: true # disabled by default
JavaScript代码
//以下日志是为了方便查看日志级别和打印日志之间关系设置的
log.debug("this is a debug log");
log.info("this is an info log");
log.warn("this is a warnning log");
log.error("this is an error log");
打印效果
查看log/luwak.log中打印的日志
2023/10/26 14:13:29 INFO js_log.go:53 this is an info log
2023/10/26 14:13:29 WARN js_log.go:44 this is a warnning log
2023/10/26 14:13:29 ERRO js_log.go:35 this is an error log
可见,开启INFO级别的日志时,luwak log中只打印了INFO及以上的log,INFO以下的DEBUG不会在luwak的日志中打印。
其他日志级别,这里就不再一一说明展示了。