Logback学习笔记
Logback的目标是作为Log4j的继任者。Logback使用模块化的架构,主要分为三个部分:logback-core、logback-classic、logback-access。
模块logback-classic作为Log4j的继任者,它做了根本性的改进。该模块实现了SLF4J API,你可以方便的切换到其它日志框架。模块logback-access和Servlet容器集成,提供HTTP访问日志的功能。在logback-core的…
阅读全文基于EFK构建日志分析系统
Fluentd是一个C编写的开源的日志收集器,支持100+不同系统的日志收集处理。
定义Fluentd的输入,需要指定一个输入插件。例如:
1 2 3 4 5 6 7 |
<source> # 使用什么插件 @type http # 你可以这样推送日志:http://localhost:8888/tag.name?json={...} port 8888 bind 0.0.0.0 </source> |
定义了一个HTTP输入。Fluentd会在8888端口上监听,等待外部传入事件。事件的例子:
1 |
curl -i -X POST -d 'json={"action":"login","user":2}' http://localhost:8888/test.cycle |
source捕获到的Fluentd事件,交由Fluentd路由引擎处理。
多个filte…
阅读全文Log4J2学习笔记
Apache Log4j 2是Log4j的重大升级, 引入了Logback包含的大量改进,并修复了Logback架构中某些内在的问题。Log4j2的特性包括:
- API和实现分离:接口更加稳定
- 性能提升:使用基于LMAX Disruptor库的异步日志机制。…
C++日志组件spdlog
spdlog是基于C++ 11的日志组件,它非常轻量,使用时你仅仅需要引入头文件就可以了。
名字空间 spdlog::之下的大多数函数都是线程安全的,除了:
1 2 3 |
void spdlog::set_pattern(const std::string&); void spdlog::set_formatter(formatter_ptr); void spdlog::set_error_handler(log_err_handler); |
日志器对象的大部分方法也是线程安全的,除了:
所有以_mt结尾的SINK都是线程安全的,以_st结尾的则不是。
spdlog默认的输出格式为:
要定制输出格式,可以调用:
或者实现自己的格式化器:
输出格式的Pattern中可…
阅读全文使用log4jdbc记录SQL语句的执行情况
- 人工记录太麻烦,需要写很多日志记录语句
- 无法获取PreparedStatement的传入参数,只能显示为"?"
日志组件Log4cplus的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <log4cplus/logger.h> #include <log4cplus/configurator.h> #include <log4cplus/helpers/loglog.h> using namespace std; using namespace log4cplus; const char* LOG4CPLUS_CONFIG_FILE = "log4cplus.properties"; try { log4cplus::PropertyConfigurator::doConfigure( LOG4CPLUS_CONFIG_FILE ); } catch ( std::runtime_error& e ) { std::cout << "Failed to initialize log4cplus with config file: " << LOG4CPLUS_CONFIG_FILE << " due to: " << e.what() << endl; } Logger logger = Logger::getRoot(); LOG4CPLUS_DEBUG(logger, "Hello " << "World"); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
log4cplus.rootLogger=DEBUG, Console, File log4cplus.logger.AmqCppClient=DEBUG log4cplus.appender.Console=log4cplus::ConsoleAppender log4cplus.appender.Console.layout=log4cplus::PatternLayout log4cplus.appender.Console.layout.ConversionPattern=[%-5p] [%t] %d (%F:%L) %n%m%n log4cplus.appender.File=log4cplus::RollingFileAppender log4cplus.appender.File.File=F:/Temp/amq-cpp-client.log log4cplus.appender.File.MaxFileSize=5MB log4cplus.appender.File.MaxBackupIndex=5 log4cplus.appender.Console.layout=log4cplus::PatternLayout log4cplus.appender.Console.layout.ConversionPattern=[%-5p] [%t] %d (%F:%L) %n%m%n |
符号 | 说明 |
%% | 转义为% |
%c |
输出logger名称,例如std::string pattern ="%c" 时输出: "cc.gmem", 也可以控制logger名称的显示层次,比如"%c{1}"时输出"gmem", 其中数字表示层次 |
%D | 显示本地时间,当std::string pattern ="%D" 时输出:"2011-11-16 1… |
log4j配置文件样本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
log4j.rootLogger=INFO, Console,File log4j.logger.cc.gmem.demo=INFO log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%-5p] [%t] %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n log4j.appender.File=org.apache.log4j.RollingFileAppender log4j.appender.File.File=c:/logs/demo.log log4j.appender.File.Append=true log4j.appender.File.Threshold=ERROR log4j.appender.File.MaxFileSize=256MB log4j.appender.File.MaxBackupIndex=100 log4j.appender.File.layout=org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern=[%-5p] [%t] %d{yyyy-MM-dd HH:mm:ss} %l%n%m%n |
依赖于该项目:https://git.gmem.cc/alex/log4j-json-layout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out"/> <layout class="org.jetbrains.appenders.JsonLayout"> <param name="excludedFields" value="host,@version" /> </layout> </appender> <category name="cc.gmem"> <priority value="debug"/> </category> <root> <priority value="info"/> <appender-ref ref="console"/> </root> </log4j:configuration> |
阅读全文