服务端日志规范

本文探讨了日志在软件开发中的重要性,包括日志的内容构成、不同级别的日志定义,以及在Java项目中实现日志的最佳实践。通过遵循这些规范,开发者可以更有效地追踪和解决问题。

一、前言

日志是表现当前程序运行的状态、记录之前程序运行轨迹定位问题来源的,当前的测试及生产环境中,如果没有稳定日志的输出,是很让开发者提心吊胆的,但是如果有太多杂乱又无意义的日志也是令人伤神。

当程序出现问题时候,如果能直接从日志中发现问题,问题解决的效率便会加倍提升,而发现不了问题可能的原因是很令人受挫的。

本文想讨论的就是在程序中需要重视起来的日志规范。

二、正文

日志内容

一条完整的日志,是能够清晰的描述这条日志发生的完整的上下文、关键数据及时间点的,就如同描述一个故事一样,不然其实是没有任何意义的。

用于追踪和记录数据的日志就必须要有以下几大要素:when who where how what

即什么时候哪个东西(人) 在哪个模块做了什么事,这个东西可以是各种对象的id或者是请求的链路id(traceId),有了这几大要素之后,便能形成一个完整的可追踪的日志记录。如下:

2019年6月10日22:28:51  用户21312421 在订单模块下单了商品,商品id:10000;

日志级别

除了一些可以追查的业务日志,同时也会输出一些错误日志或者在开发阶段打印出来的调试日志(详细数据或者执行sql等),其中部分日志级别如下:

 

1、ERROR定义:输出一些错误信息,主要是指程序会出现的运行期错误

2、WARN定义:输出一些警告信息,如出现了预期之外的数据问题,但程序依旧可以运行,如缓存服务有问题等

3、INFO定义:主要是记录系统运行状态等关联信息,如摸个用户查询订单的数据

4、DEBUG定义:调试信息,主要用在调试期间开发环境的参数追踪,如mybatis的sql信息

日志代码规范

这里主要是讲的java项目中打印日志的规范。

  • 如果出现错误应该是如下格式:

log.error("订单模块错误:{}",e);

而不应该用e.getMessage打印,log.error("订单模块错误:{}",e.getMessage);  这样则会不打印出错误的栈,很难清洗的定位问题;

  • 在抛出异常前无需再重复打印出异常,如下:将会打印出两行相同的错误堆栈信息;

log.error(e);

throw new Exception(e);

  • 尽量少打印无效重复且固定的日志输出,如下:一些固定的商品列表,将会导致很多重复且无用的大量数据被打印出来;

log.info("用户id:{}查询出商品列表:{}",userId,goodsList);

三、结语

本文总结了日志打印的几大要素、日志打印的级别区别、java编码中日志的规范编码等,希望能在使用日志这一个工具的时候能找到自己的需求,从而制定出适合的日志规范。

 

 

 

 

### 使用Python获取服务器端日志 为了通过Python读取并处理标准Web日志文件,可以采用多种方法。一种常见的方式是从本地存储的日志文件中直接读取数据。假设日志文件位于`assets/logdata.txt`路径下。 #### 方法一:从本地文件读取日志 可以直接打开指定位置的日志文件,并逐行解析其内容: ```python def read_log_file(file_path): with open(file_path, 'r') as f: lines = f.readlines() parsed_logs = [] for line in lines: parts = line.split(' ') try: log_entry = { "host": parts[0], "user_name": parts[1].strip() if parts[1].strip() != "-" else None, "time": parts[3][1:] + " " + parts[4][:-1], # Remove square brackets and quotes "request_type": ''.join(parts[5:]) } parsed_logs.append(log_entry) except IndexError: continue return parsed_logs ``` 此函数尝试按照给定格式解析每一行日志条目[^1]。注意这里简单地忽略了无法正确分割成所需部分的异常情况;实际应用中可能需要更复杂的错误处理逻辑来应对各种不规范输入。 对于远程服务器上的日志访问,则通常涉及SSH或其他网络协议来进行安全通信。这超出了当前讨论范围,但如果目标是在同一台机器上运行的应用程序之间共享信息,也可以考虑使用socket编程或RESTful API等方式实现跨进程通讯。 另外,在某些情况下,特别是当涉及到云服务提供商托管的服务时,还可以利用特定平台提供的SDK(如AWS SDK for Python Boto3库),这些工具能够简化与云端资源交互的过程,从而间接达到获取日志的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值