魔兽世界服务器Trinitycore分析三:日志模块
一:日志接口
TrinityCore的日志有六个级别:Trace,Debug,Info,Warn,Error,Fatal
它们分别对应以下这六个接口,(filterType__也是在配置文件中指定的)
#define TC_LOG_TRACE(filterType__, ...)
#define TC_LOG_DEBUG(filterType__, ...)
#define TC_LOG_INFO(filterType__, ...)
#define TC_LOG_WARN(filterType__, ...)
#define TC_LOG_ERROR(filterType__, ...)
#define TC_LOG_FATAL(filterType__, ...)
二:日志类型与Appender
说明:这个在配置文件的注释中说得很详细,直接帖两段吧
Appender配置:
# Appender config values: Given a appender "name"
# Appender.name
# Description: Defines 'where to log'
# Format: Type,LogLevel,Flags,optional1,optional2,optional3
#
# Type
# 0 - (None)
# 1 - (Console)
# 2 - (File)
# 3 - (DB)
#
# LogLevel
# 0 - (Disabled)
# 1 - (Trace)
# 2 - (Debug)
# 3 - (Info)
# 4 - (Warn)
# 5 - (Error)
# 6 - (Fatal)
#
# Flags:
# 0 - None
# 1 - Prefix Timestamp to the text
# 2 - Prefix Log Level to the text
# 4 - Prefix Log Filter type to the text
# 8 - Append timestamp to the log file name. Format: YYYY-MM-DD_HH-MM-SS (Only used with Type = 2)
# 16 - Make a backup of existing file before overwrite (Only used with Mode = w)
#
# Colors (read as optional1 if Type = Console)
# Format: "fatal error warn info debug trace"
# 0 - BLACK
# 1 - RED
# 2 - GREEN
# 3 - BROWN
# 4 - BLUE
# 5 - MAGENTA
# 6 - CYAN
# 7 - GREY
# 8 - YELLOW
# 9 - LRED
# 10 - LGREEN
# 11 - LBLUE
# 12 - LMAGENTA
# 13 - LCYAN
# 14 - WHITE
#
# File: Name of the file (read as optional1 if Type = File)
# Allows to use one "%s" to create dynamic files
#
# Mode: Mode to open the file (read as optional2 if Type = File)
# a - (Append)
# w - (Overwrite)
#
# MaxFileSize: Maximum file size of the log file before creating a new log file
日志配置:
# Appender config values: Given a appender "name"
# Appender.name
# Description: Defines 'where to log'
# Format: Type,LogLevel,Flags,optional1,optional2,optional3
#
# Type
# 0 - (None)
# 1 - (Console)
# 2 - (File)
# 3 - (DB)
#
# LogLevel
# 0 - (Disabled)
# 1 - (Trace)
# 2 - (Debug)
# 3 - (Info)
# 4 - (Warn)
# 5 - (Error)
# 6 - (Fatal)
#
# Flags:
# 0 - None
# 1 - Prefix Timestamp to the text
# 2 - Prefix Log Level to the text
# 4 - Prefix Log Filter type to the text
# 8 - Append timestamp to the log file name. Format: YYYY-MM-DD_HH-MM-SS (Only used with Type = 2)
# 16 - Make a backup of existing file before overwrite (Only used with Mode = w)
#
# Colors (read as optional1 if Type = Console)
# Format: "fatal error warn info debug trace"
# 0 - BLACK
# 1 - RED
# 2 - GREEN
# 3 - BROWN
# 4 - BLUE
# 5 - MAGENTA
# 6 - CYAN
# 7 - GREY
# 8 - YELLOW
# 9 - LRED
# 10 - LGREEN
# 11 - LBLUE
# 12 - LMAGENTA
# 13 - LCYAN
# 14 - WHITE
#
# File: Name of the file (read as optional1 if Type = File)
# Allows to use one "%s" to create dynamic files
#
# Mode: Mode to open the file (read as optional2 if Type = File)
# a - (Append)
# w - (Overwrite)
#
# MaxFileSize: Maximum file size of the log file before creating a new log file
三:配置例子:
Appender.Console=1,3,0
Appender.Server=2,2,0,Server.log,w
Logger.root=2,Console Server
以上这三句,定义了两个Appender:Console, Server,一个log type:root
Appender.Console说明将日志输出到终端上,最低输出级别是Info,输出字体颜色是黑色(因终端的不同而不同)
Appender.Server说明将日志输出到文件,最低输出级别是Debug,输出文件是(Server.log),以重写(非添加)的方式写入
Logger.root最低输出级别是Info,使用Console和Server的配置
四,底层实现
这里简单地说一下,就不太深入了
以 TC_LOG_INFO("qch", "Hello, world"); 为例子
这句实现上是调用了
if(Log::instance()::ShouldLog("qch", LOG_LEVEL_INFO) )Log::instance()::outMessage ("qch", LOG_LEVEL_INFO, "Hello,world");
ShouldLog比较好理解,直接将配置文件中的最低日志输出级别和LOG_LEVEL_INFO一比较就搞定。
outMessage就比较麻烦了,层层调用,有兴趣的可以去看看,这里就不多作解释了。
如果把Appender的Type设为3(DB),那每写一条日志,就是在auth库的logs表中插入一条记录:
INSERT INTO logs (time, realm, type, level, string) VALUES (1409544332, 0, 'qch', 3,'Hello, world\n')
魔兽世界服务器Trinitycore分析三:日志模块相关推荐
- 魔兽世界服务器Trinitycore分析一:前言
一:简介 项目地址:https://github.com/TrinityCore/TrinityCore 帖一段官网介绍吧 TrinityCore is a MMORPG Framework base ...
- Linux服务器 | 服务器模型与三个模块、两种并发模式:半同步/半异步、领导者/追随者
文章目录 两种服务器模型及三个模块 C/S模型 P2P模型 I/O处理单元.逻辑单元.存储单元 并发 同步与异步 半同步/半异步模式 变体:半同步/半反应堆模式 改进:高效的半同步/半异步模式 领导者 ...
- fix8源码分析之日志模块
本分析基于fix8 1.3.4版本源代码: fix8中全局日志的使用方式如下: GlobalLogger::set_global_filename(log); //设置日志输出文件 FIX8: ...
- python logging模块的作用_Python 日志模块logging分析及使用-2
本文作为Python日志模块的补充,主要介绍日志回滚RotatingFileHandler和TimedRotatingFileHandler的使用,以及其所带来的问题.Logger对象的日志等级是如何 ...
- 魔兽世界 服务器维护,魔兽世界8.0:服务器崩溃紧急维护三小时 网易这次得背大锅!...
原标题:魔兽世界8.0:服务器崩溃紧急维护三小时 网易这次得背大锅! 魔兽世界8.0版本在8月14日凌晨6点30分准时开启,不知道有多少玩家彻夜难眠,定了不知道多少闹钟,甚至不惜请假.辞职只为了在第一 ...
- Mybatis源码日志模块分析
看源码需要先下载源码,可以去Mybatis的github上的仓库进行下载,Mybatis 这次就先整理一下日志这一块的源码分析,这块相对来说比较简单而且这个模块是Mybatis的基础模块. 之前的文章 ...
- Windows服务器流量异常排查分析(Nginx日志分析):Web Log Expert 和 GlassWire 的使用
最近某台阿里云服务器流量带宽突然超负荷运转,想了想,难道被攻击了?不应该会用户突然暴增啊!?于是开始排查流量来源. 首先,用 GlassWire 监听服务器的那个应用占用了大量的流量.GlassWir ...
- 从零开始实现C++ TinyWebServer(三)---- 补偏救弊调试分析,日志系统来帮忙
文章目录 前言 1. 知识点 1.1 单例模式 1.2 异步日志 2. 日志的运行流程 3. blockqueue 4. 日志的分级与分文件 5. 实现代码 blockqueue.h log.h lo ...
- 微软企业库4.1学习笔记(三十六)日志模块 简介
日志模块 企业库的日志模块简单的实现了日志功能的常用功能.开发者可以利用模块在下面的位置记录信息: 事件日志 电子邮件 数据库 消息队列 文本文件 WMI的事件查看器 自定义的位置 模块为记录在任何位 ...
最新文章
- 半斤八两中级破解 (四) TCP_UDP协议转向本地验证
- java 对象图_Java对象内存图
- 京东小程序上线,剑指何方?
- 搜索引擎学习(二)Lucene创建索引
- 元祖数据mysql_MySQL数据库——表操作
- Vista下将Area效果应用到整个窗体
- 编译FREETYPE:VS2010错误MSB8008
- shiro放行_Shiro框架详解
- Tomcat热部署三种方式的详细说明
- 视频下载转换器:MovieSherlock for Mac
- 虚拟服务器忘记密码,Win7系统下VMware虚拟机忘记开机密码如何解决
- 计算机考数学一英语二的学校,【专硕】初试考数学一的学校统计
- ubuntu安装软件包命令
- Word文档 回车符去除
- NB-IoT是什么?
- python编写coc部落冲突游戏辅助(1)
- SEASKY开源机械键盘 AD PCB 教程
- 机器学习常用算法原理及优缺点
- (纪中)1593. 【GDKOI训练】电视游戏问题(vidgame)【DP】
- 【数字图像处理】编码解码jpeg和png图片(C语言实现)
热门文章
- 想要删除视频中不需要的片头片尾怎么操作
- 为什么挂脖式不适合运动呢?五款舒适好用的入耳式蓝牙耳机不妨试试
- 半入耳式蓝牙耳机推荐,盘点2022高品质半入耳蓝牙耳机
- CDR中调和工具的使用方法
- 7天搞定FPGA精录总结Episode.6 串口通信,系统设计【基于Robei、Altera QuartusⅡ与Python】
- 三年磨一剑,高德地图体验优化总结
- 炒了8年的概念,到底该如何理解DevOps这个词
- wps怎样c语言程序流程图,wps怎么制作流程图【使用方法】
- 2022-03-26 原生js实现一个点击弹出的可拖拽登录框(待编辑)
- Centos7 添加删除用户和用户操作命令