Metadata-Version: 2.1
Name: log-client
Version: 1.2.6
Summary: Easy log library for Elasticsearch
Home-page: https://github.com/dugangandy/log-client-python.git
Author: dugangandy@qq.com
License: MIT
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: License :: OSI Approved :: MIT License
Description-Content-Type: text/markdown

# log.client

一款Python日志客户端，支持直接写入Elasticsearch。

* * * 
# v1.2.6:

## 修复

1、修复 ES bulk 写入 read timeout 导致日志丢失的问题：原代码异常捕获使用了 `requests.exceptions.*`，但 elasticsearch-py 7.13 走 urllib3 实际抛 `elasticsearch.exceptions.ConnectionTimeout`，导致连接异常分支永不命中，日志重试队列死循环。

2、修复连接异常时重建了错误对象（`requests.Session`）而非真正被 bulk 使用的 `self.es` 客户端，导致坏连接池被持续复用。

## 优化

1、ES 客户端增加超时与重试配置：`timeout=30`（原默认 10s）、`retry_on_timeout=True`、`max_retries=3`，应对瞬时网络抖动时自动换连接重试。

2、`helpers.bulk()` 增加 `request_timeout=30`，防止单次 bulk 请求超时。

3、新增 `_build_es()` 方法统一构造 ES 客户端，连接异常时重建 `self.es` 丢弃陈旧连接池。

# v1.2.2:

## 新功能

1、支持通过环境变设置日志组件配置

# v1.2.1:

## 新功能

1、支持ElasticSearch最小安全性设置。


# v1.1.1:
## 功能优化：

1、支持批量写入Elasticsearch（依赖Elasticsearch包）。

2、增加日志队列慢的异常处理。

* * *
## Usage:
### 1、创建配置文件config.ini:
```ini
[log]
app_name = YOUR-APPNAME
es_urls = http://es-ip:9200
es_index_name = applog-20221228
# 1.2.1版本新增配置
es_username = elastic
es_password = search
```
app_name: 应用名称  
es_urls: Elasticsearch 地址。填写多个时，用,分隔。  
es_index_name: Elasticsearch 索引名称  

1.2.2 支持同名的环境变量替换config.ini. 

```
优先使用环境变量的设置.
linux:
export app_name=testapp
export es_urls=http://es-ip:9200
```

### 2、创建配置文件logging.ini:

```ini
[loggers]
keys=root

[handlers]
keys=consoleHandler,qHandler

[formatters]
keys=simpleFmt,detailFmt

[logger_root]
level=DEBUG
handlers=consoleHandler,qHandler

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=detailFmt
args=(sys.stdout,)

[handler_qHandler]
class=qlog.logger.QlogHandler
level=INFO
formatter=simpleFmt
args=()

[formatter_detailFmt]
format="%(asctime)-15s %(levelname)s %(filename)s %(funcName)s lineNo: %(lineno)d details: %(message)s"

[formatter_simpleFmt]
format="%(message)s"
```

### 3、日志写入测试

```python
import logging
import logging.config
from time import sleep

logging.config.fileConfig('logging.ini')
logger = logging.getLogger('root')
logger.info('这是一条中文字符测试日志')
logger.info('this is a info log.')
logger.warning('this is a warning log.')
sleep(30)
```

### 4、查看Elasticsearch日志

![img.png](img.png)

