原写于2010-10-09
题记:日志记录,对一个应用非常重要,不仅仅只为定位线上bug(exception日志),还有业务日志,比如:统计用户的搜索词、响应时间等。
一、日志级别
众所周知,在log4j中定义5个最常用日志级别:debug、info、warn、error、fatal,级别依次严重。
可大家思考过,什么时候应该记info,exception时是应该记warn,还是error呢 ?下面是今天小团队讨论后,自己的一些理解。
debug:程序内部的信息,对于外部使用的人是没有意义。比如:函数的执行时间。(fine-grained information events that are most useful to debug an application)debug记录的是细粒度的事件信息,对于调式程序是非常有用的。
info:informational messages that highlight the progress of the application at coarse-grained level.(强调应用的执行的进度,关键分支的记录)。比如:关键分支记录(输入参数等),
对运维工程师来说这些信息也是有价值的,info指明程序的运行是否符合正确的业务逻辑。
对于warn与error级别,是我自己最困惑的 ?
先讲个形象的例子 :
有一天,李三说请你帮个忙,帮他收拾一下自行车,但是他的自行车是放在他自己家里的,房屋上锁。
1、李三:给你钥匙,此时你没有工具,但是你可以用你自家的工具修理自行车。结果:完成任务;过程:存在问题,内部可以处理此问题。
2、李三:没给你钥匙,但给你工具或者没给你工具,此时你不能接触到自行车。结果:无法完成任务;过程:存在问题,无法处理此问题。
结论:1情况,记warn;2情况,记error。观点:关注的是最小单元的业务是否能够完成,而对于应用来说,最小单元的业务就是“method方法”,每个方法去完成的任务都是一个独立的、最小单元的业务。
提醒:必须结合具体场景来判断,比如:dao从数据库获取数据失败,对自身来说是error,没有完成获取数据的任务;但对业务层来说,或者有其它方法修复此异常,如通过http重新获取等,此时业务层是完成自身任务的,所以为warn。
1. warn:potentially harmful situations.(潜在的有害状态)。比如:广告投放,淘宝搜索右侧p4p广告会根据地域展现,但某次用户搜素,ip地址获取失败,可能会用默认值替代或者为空,但是并不影响右侧广告的展现。所以展现广告的任务是完成的,对于业务来说是执行成功的,尽管过程中出现问题。
2. error:error events that might still allow the application to continue running.(错误事件发生,程序或许依然能够运行)。比如:广告前段展现,通过http从引擎获取数据时,因为引擎的机器连接数达到上限或者临时网络原因,timeout,但程序能正常运行,next请求引擎则成功。从函数角度看,此函数任务没有完成,记error。
3. fatal:very severe error events that will presumably lead the application to abort.(错误可能会导致应用崩溃)。
对于日志级别,或许大家也会有自己的理解(如有不同意见,请大家指点)
二、记录信息
这个话题简单三点:
1、做什么操作
2、输入内容
3、堆栈信息(有堆栈信息的情况下)
相关推荐
5. 日志级别:通常我们在产品环境中日志的级别都在 INFO 以上,所以我们必须保证在这样的情况下程序仍然能够输出足够我们作出判断的信息。 日志级别的分类: 1. FATAL 级别:用于记录致命错误,例如程序崩溃、数据...
例如,如果我们想要控制特定类`com.example.MyClass`的日志级别为WARN,配置文件中的相应内容可能如下: ```properties # log4j.properties 示例 log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache...
”日志级别、函数名、日志内容“ 三个字段,字段之间以空格拆分。请看数据源的文件。 (2)对读入都日志信息流进行指定筛选出日志级别为error或warn的,并输出到外部MySQL中。 需要用到的函数 (1)输入采用...
`Printk`日志级别是一个关键特性,允许系统根据不同的严重程度和信息类型来过滤和记录消息,帮助开发者和系统管理员更好地理解和诊断问题。下面将详细介绍各个日志级别的含义和应用场景。 1. **KERN_EMERG (紧急...
总的来说,通过合理配置Logback的日志级别、使用过滤器、控制异常堆栈轨迹的输出以及利用MDC,可以有效地减少异常日志的打印内容,同时确保关键信息的可读性和可用性。记得根据实际需求调整这些设置,以达到最佳的...
2. 通过调用系统接口,观察当前日志输出,了解日志级别对日志内容的影响。 3. 登录Spring Boot Admin管理控制台,找到要修改的日志级别,例如`com.zhanghan.zhboot.controller.CheckMobileController`,将其设置为...
7. 日志管理的最佳实践:在处理日志数据时,需要遵循一系列最佳实践,比如最小化日志级别、加密敏感信息、设置合适的保留周期、定期备份和测试恢复策略等。 8. 持续监控和改进:日志管理与分析是一个持续的过程,...
这里假设日志服务器的IP地址为1.2.0.1,并且使用默认的loghost通道,日志级别设置为local5。 ``` [Sysname]info-center loghost 1.2.0.1 channel loghost facility local5 ``` 3. **配置输出规则** 最后一步是...
如果要修改特定包的日志级别,例如将`com.xxx.commond`的级别设为DEBUG,可以发送POST请求到`http://localhost:8080/loggers/com.xxx.commond`,请求体内容如下: ```json { "configuredLevel": "DEBUG" } ``` ...
3. 日志级别切换:在运行时动态调整日志级别,适应不同的运行环境。 4. 日志框架绑定:使用SLF4J API,绑定不同的日志实现,如Log4j或Logback。 5. 日志入库:如何将日志信息存储到数据库,以及查询和分析日志数据。...
在日志记录中,不同的日志级别代表了不同严重程度的信息。常见的日志级别包括: - **DEBUG**:用于开发阶段的调试信息,通常在生产环境中关闭。 - **INFO**:常规的信息,用于记录系统的运行状态。 - **WARN**:...
4. **日志格式**:统一日志格式,包括时间戳、线程ID、日志级别、消息内容等,便于分析。 5. **异步写入**:使用异步方式写入日志,避免阻塞主线程。 ### 使用第三方库 虽然MFC提供了基本的日志功能,但在实际项目...
- 常见的格式化模板有`%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c %x - %m%n`,其中 `%d` 是日期,`%t` 是线程,`%-5p` 是日志级别,`%c` 是类名,`%x` 是异常跟踪,`%m` 是消息,`%n` 是换行符。 6. **日志切割**: ...
3. **`log(level, message)`的实现**:检查日志级别是否高于或等于当前设置的最低日志级别,如果是,则将`message`格式化并写入日志文件。可能使用`std::stringstream`来格式化消息,然后通过`std::ofstream`的`操作...
3. **日志格式和内容**:可以自定义日志信息的内容,包括时间戳、线程ID、日志级别、消息来源等,以提供清晰的调试信息。 4. **日志切片**:在处理大量数据时,可能会生成大量的日志。Kettle可以通过设置日志切片来...
4. **日志格式化**:日志消息通常包括时间戳、线程ID、日志级别和实际的消息内容。格式化函数可以帮助我们生成结构化的日志条目。 5. **Win32接口**:在Windows平台上,我们可以使用`CreateFile`、`WriteFile`和`...
2. **日志级别**:支持不同级别的日志,如DEBUG、INFO、WARNING、ERROR等,用户可以根据需要控制日志的详细程度。 3. **日志格式化**:允许自定义日志输出的格式,包括时间戳、进程ID、线程ID、日志级别等信息。 4...
这些组件提供了丰富的日志级别(如DEBUG、INFO、WARN、ERROR),以及灵活的配置方式,可以控制日志输出的位置、格式和内容。 5. **日志设计**:日志系统可能包含多个模块,如登录日志、操作日志、异常日志等。每个...
5. **日志级别**:根据信息的重要性,日志组件通常提供不同的日志级别,如调试(Debug)、信息(Info)、警告(Warning)和错误(Error)。这样可以过滤不重要的信息,专注于关键问题。 6. **日志存储**:日志文件...