开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 33

潘志群/码多多 全能知识库(Python 版)

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (2)
标签 (3)
master
develop
1.0.2
1.0.1
1.0.0
master
分支 (2)
标签 (3)
master
develop
1.0.2
1.0.1
1.0.0
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (2)
标签 (3)
master
develop
1.0.2
1.0.1
1.0.0
ai-python
/
server
/
kernels
/
logger.py
ai-python
/
server
/
kernels
/
logger.py
logger.py 5.14 KB
一键复制 编辑 原始数据 按行查看 历史
zero 提交于 2025年05月26日 15:35 +08:00 . init
# +----------------------------------------------------------------------
# | ChatWork智能聊天办公系统
# +----------------------------------------------------------------------
# | 软件声明: 本系统并非自由软件,未经授权任何形式的商业使用均属非法。
# | 版权保护: 任何企业和个人不允许对程序代码以任何形式任何目的复制/分发。
# | 授权要求: 如有商业使用需求,请务必先与版权所有者取得联系并获得正式授权。
# +----------------------------------------------------------------------
# | Author: ChatWork Team <2474369941@qq.com>
# +----------------------------------------------------------------------
import os
import sys
import gzip
import logging
import importlib
from datetime import datetime
from typing import Dict, List, IO
_LEVEL_NUM = {
"notset": logging.NOTSET,
"debug": logging.DEBUG,
"info": logging.INFO,
"warning": logging.WARNING,
"error": logging.ERROR,
"critical": logging.CRITICAL
}
__all__ = ["configure_logger"]
class CompressedFileHandler(logging.FileHandler):
def __init__(self, filename, mode="a", encoding=None, delay=False, gzip_size=None):
super().__init__(filename, mode, encoding, delay)
self.gzip_size: int = int(gzip_size) if gzip_size else 1024 * 1024 * 5
self.filename: str = filename
def emit(self, record):
""" Emit a record """
if self.stream is None:
self.stream: IO = self._open()
if self.stream is not None and self.do_dir():
self.stream.close()
self.stream = self._open()
self.do_zip()
logging.StreamHandler.emit(self, record)
def do_dir(self):
""" Rebuild log directory file """
year: str = datetime.now().strftime("%Y%m")
days: str = datetime.now().strftime("%d")
path: str = "/".join(self.baseFilename.split("/")[:-2])
dirs: str = f"{path}/{year}"
self.baseFilename = f"{dirs}/{days}.log"
if not os.path.exists(dirs):
os.makedirs(dirs)
if not os.path.exists(self.baseFilename):
return True
return False
def do_zip(self):
""" Compress and archive logs """
if os.path.exists(self.baseFilename) and os.path.getsize(self.baseFilename) > self.gzip_size:
with open(self.baseFilename, "rb") as f_in, gzip.open(self.baseFilename + ".gz", "wb") as f_out:
f_out.writelines(f_in)
open(self.baseFilename, "w").close()
def configure_logger():
""" Configure Logger """
config = __loading_logs_configs()
path: str = config.get("path") or "runtime/log"
gzip_size: int = int(config.get("gzip_size")) or 1024 * 1024 * 5
level_file: int = _LEVEL_NUM[config.get("level_file") or "debug"]
level_sole: int = _LEVEL_NUM[config.get("level_sole") or "info"]
enable_file: bool = config.get("enable_file") or True
enable_sole: bool = config.get("enable_sole") or True
format_file: str = (config.get("format_file")
or "[%(asctime)s][%(levelname)s] [%(filename)s:%(lineno)d] [%(thread)d] - %(message)s")
format_sole: str = (config.get("format_sole")
or "[%(levelname)s]: [%(filename)s:%(lineno)d] [%(thread)d] - %(message)s")
format_date: str = config.get("format_date") or "%Y-%m-%d %H:%M:%S %p"
rely_levels: Dict[str, List[str]] = config.get("rely_levels") or {}
handlers = []
if enable_file:
year: str = datetime.now().strftime("%Y%m")
days: str = datetime.now().strftime("%d")
path: str = f"{path}/{year}"
if not os.path.exists(path):
os.makedirs(path)
file_handler = CompressedFileHandler(filename=f"{path}/{days}.log", gzip_size=gzip_size)
file_handler.setFormatter(logging.Formatter(format_file))
file_handler.setLevel(level_file)
handlers.append(file_handler)
if enable_sole:
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(logging.Formatter(format_sole))
console_handler.setLevel(level_sole)
handlers.append(console_handler)
logging.basicConfig(
level=logging.NOTSET,
format=format_file,
datefmt=format_date,
handlers=handlers if handlers else None
)
logging.getLogger("asyncio").setLevel(logging.ERROR)
logging.getLogger("tortoise").setLevel(logging.ERROR)
logging.getLogger("apscheduler").setLevel(logging.ERROR)
for key, rely in rely_levels.items():
if _LEVEL_NUM.get(key) is None:
raise Exception(f"`rely_levels` Unsupported error types [{key}]")
for module in rely:
if key == "error" and module in ["asyncio", "tortoise", "apscheduler"]:
continue
logging.getLogger(module).setLevel(key)
def __loading_logs_configs():
""" Load Log configuration """
configs = {}
try:
package = importlib.import_module("config")
clz = getattr(package, "GlobalSetting", None)
if not clz:
return configs
obj = clz().dict()
return obj.get("LOGGER", {})
except ModuleNotFoundError:
return configs
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

🤖🤖🤖码多多全开源全能 AI知识库 python 版,支持导入数据完成向量化训练后,用户提问即可进行向量化搜索,并且结合大语言模型进行AI回答,可以提升AI回答的专业性和实用性。
暂无标签
Apache-2.0
使用 Apache-2.0 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/pan_codee/ai-python.git
git@gitee.com:pan_codee/ai-python.git
pan_codee
ai-python
码多多 全能知识库(Python 版)
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /