如何有效开通并利用日志模块以提升系统监控效率?

开通日志模块是计算机系统中用于记录和存储各种操作和事件的功能。它可以帮助管理员追踪系统活动,诊断问题,并监控安全事件。日志模块通常可以配置,以确定记录哪些信息以及如何保存这些信息。

ModuleLogger接口继承自slf4j的Logger接口,并扩展了5个入参为LogSchema的方法。

开通日志模块_日志模块
(图片来源网络,侵删)

在getInnerLogger方法中,我们调用了ModuleLoggerRepository.getModuleLogger(this.name())方法,这个方法是真正获取日志对象的地方, 具体代码如下:

https://github.com/lvyahui8/feegocommon/blob/master/feegocommonloggingcore/src/main/java/io/github/lvyahui8/core/logging/ModuleLoggerRepository.java

public class ModuleLoggerRepository {

private static final Map<String, Logger> moduleLoggerMap = new ConcurrentHashMap<>();

public static Logger getModuleLogger(String moduleName) {

开通日志模块_日志模块
(图片来源网络,侵删)

return moduleLoggerMap.computeIfAbsent(moduleName, k > initLogger(k));

}

private static Logger initLogger(String moduleName) {

// 初始化logger

LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();

开通日志模块_日志模块
(图片来源网络,侵删)

// 根据业务模块名生成日志文件路径

String logPath = "logs" + File.separator + moduleName;

// 创建日志文件滚动策略

RollingFileAppender<ILoggingEvent> rollingAppender = RollingFileAppender.createAppender(logPath + ".log", "true", "10MB", "10");

// 设置日志格式

rollingAppender.setFormatter(new PatternLayoutEncoder());

// 创建logger

Logger logger = context.getLogger(moduleName);

logger.addAppender(rollingAppender);

logger.setLevel(Level.INFO);

return logger;

}

3、3 如何实现模块化?

日志模块化,主要是通过不同的业务模块输出到不同的日志文件来实现的,这里有两个关键点

每个业务模块都有一个独立的日志文件

日志文件的命名和存储结构需要符合一定的规范

在initLogger中, 我们根据业务模块名生成日志文件路径,然后创建一个RollingFileAppender, 并设置了日志滚动策略和日志格式,最后将这个appender添加到logger中,并设置好日志级别。

这样, 我们就实现了一个业务模块对应一个日志文件的需求, 并且这些日志文件都统一放在一个logs文件夹下, 方便查看和管理。

至此,我们已经了解了这款工具的用法和实现原理,可以看出,它非常适合于业务开发初期,多人协作开发同一个应用的场景, 可以快速实现日志模块化,提高开发效率,由于其内部使用了动态代理和Java编译时注解处理器等技术,使得工具具有很高的灵活性和可扩展性。

参考资料

https://github.com/lvyahui8/feegocommon/tree/master/feegocommonloggingstarter

https://github.com/lvyahui8/feegocommon/tree/master/feegocommonloggingcore

开通日志模块_日志模块

在现代软件开发过程中,日志模块扮演着至关重要的角色,日志不仅可以帮助我们了解软件系统的运行状态,还能在系统出现错误时迅速定位问题,Python的logging模块是实现这一功能的核心工具之一,它提供了一套完整的日志记录解决方案,能够帮助开发者有效地捕获、处理和记录日志信息,以下是关于日志模块的相关介绍:

1、基本组成

Logger:Logger是应用程序直接使用的接口,负责生成日志消息,可以通过设置不同的日志级别来控制哪些消息被记录。

Handler:Handler负责将日志消息发送到目的地,如控制台、文件等,每种Handler都可以设置日志级别和格式化程序。

Filter:Filter提供了更精细的控制,用于决定哪些日志记录应该被最终输出。

Formatter:Formatter定义了日志消息的最终输出格式,比如时间格式、消息格式等。

2、使用示例

创建一个基本的日志记录器并输出到控制台:

import logging
创建日志记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
创建控制台处理器
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
创建格式器
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s')
ch.setFormatter(formatter)
将处理器添加到记录器
logger.addHandler(ch)
记录一些日志
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

将日志记录到文件并实现自动滚动:

import logging
from logging.handlers import RotatingFileHandler
创建日志记录器
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
创建滚动文件处理器,并设置最大备份文件数和每个文件的最大字节数
rh = RotatingFileHandler('my_log.log', maxBytes=2000, backupCount=10)
rh.setLevel(logging.DEBUG)
创建格式器
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s')
rh.setFormatter(formatter)
将处理器添加到记录器
logger.addHandler(rh)
记录一些日志
for _ in range(3000):
    logger.debug('This is a debug message')

在代码中动态改变日志级别:

import logging
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
假设在某个时刻,我们只想看ERROR及以上级别的日志
logger.setLevel(logging.ERROR)

3、最佳实践

在模块级别使用__name__创建logger:这样可以清晰地知道日志来自哪个模块。

使用合适的日志级别:合理使用不同的日志级别可以帮助我们快速筛选出关心的信息。

使用结构化的日志消息:例如使用JSON格式记录日志,便于后续的日志分析。

使用异常日志记录:使用logger.exception()可以记录异常堆栈信息,便于问题排查。

不要在日志中记录敏感信息:避免记录可能被利用的敏感数据。

Python的logging模块提供了一个强大且灵活的框架,用于记录和管理日志,通过合理配置和使用最佳实践,可以极大地提高开发效率和程序的可维护性。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/783924.html

(0)
未希的头像未希新媒体运营
上一篇 2024-07-19 03:33
下一篇 2024-07-19 03:35

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入