log4j --其他日志 后来log4j--->logback (与log4j同一作者,性能得到提高,配置更灵活)
|
V
common-log统一接口,自动扫描实现类,有缺点,在独立进程中的类扫描不到
|
V
sef4j接口
2.如何打印日志:
log.info("运行错误{}",e.getMessage());
log.info("运行错误",e);
主要使用上述方式打印日志时,如果使用%c%L打印类名和行号时,class的名称显示的是超类的名字,L显示的当前类的行号。
3.项目的坑
core-MD居然用到了3种getLoger的方法,有common-logs的,有sellf4j的,有log4j的,所以在排查时遇到一些问题。
多种日志实现并存时,比如log4j和logback,随机得到日志实现。
由于历史原因,系统有logback、log4j两套日志,试着关闭log4j,后发现spring的日志没有啦,spring和hibernate等使用了log4j.而习题自动找到了logback的配置。另外如果在spring中没有配置logback.xml,则maven启动时使用src/test/resoureces/log_back.xml文件,发布时使用src/main/resource目录下的。
在生产机A上,由于多个项目使用了公共lib,所以日志打印总是有问题,不能上传到logstash,好像也不能生成文件。
在另外一台生产机使用独立lib时时正常。
addActivity属性:是否还是其他匹配打印日志。
比如第一个logger设置了additivity=true,所以除了写入file_access还会写入stdout。
<logger name="com.mindao.app.ea.interceptor.AccessLogInterceptor" level="info" additivity="true"> <appender-ref ref="file_access" /> </logger> <logger name="com.mindao" level="info" additivity="false"> <appender-ref ref="stdout" /> </logger>
4.log4j如何对接logstash
log4j.rootLogger=INFO,console,socket # for package com.demo.elk, log would be sent to socket appender. #log4j.logger.com.mindao.elk=info, socket log4j.logger.com.mindao.elk=info, socket # appender socket log4j.appender.socket=org.apache.log4j.net.SocketAppender log4j.appender.socket.Port=4567 log4j.appender.socket.RemoteHost=120.76.44.235 log4j.appender.socket.layout=org.apache.log4j.PatternLayout log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n log4j.appender.socket.ReconnectionDelay=10000 # appender console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%l] %m%n logstash的配置 mkdir config vi config/log4j_to_es.conf 输入以下内容: # For detail structure of this file# Set: https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html input { # For detail config for log4j as input, # See: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html log4j { mode => "server" host => "centos2" port => 4567 } } filter { } output { # For detail config for elasticsearch as output, # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html elasticsearch { action => "index"#The operation on ES hosts => "centos2:9200"#ElasticSearch host, can be array. index => "applog"#The index to write data to. } }
5 logback如何对接logstash
https://github.com/logstash/logstash-logback-encoder
Including it in your project
Maven style: <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>4.7</version> </dependency> UDP Appender
To output JSON for LoggingEvents to a syslog/UDP channel, use the LogstashSocketAppender in your logback.xml like this:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appendername="stash"class="net.logstash.logback.appender.LogstashSocketAppender"> <host>MyAwesomeSyslogServer</host> <!-- port is optional (default value shown) --> <port>514</port> </appender> <rootlevel="all"> <appender-refref="stash" /> </root> </configuration>
logstash的配置
input { syslog { codec => "json" } }