有很多记录日志的方式,比如 log4j、Logging、commons-logging、slf4j 等等,这里呢我就说说我们做项目经常用到的几种。
log4j
配置文章可以看我的文章 Log4j配置详解
我用的是 log4j-1.2.15.jar 这个包,将其放在lib下
输出到控制台
log4j.properties配置
DEBUG 日志优先级,stdout(自定义名字) 代表日志输出到那个地方
log4j.rootLogger= ERROR, stdout
设置日志输出类型 appender负责控制日志记录操作的输出 ConsoleAppender:日志信息输出到控制台
log4j.appender.stdout= org.apache.log4j.ConsoleAppender
日志自定义格式
log4j.appender.stdout.layout= org.apache.log4j.PatternLayout
日志输出格式为 优先级、 [产生日志事件的线程名]、日志信息、换行
log4j.appender.stdout.layout.ConversionPattern= %5p [%t] %m%n
测试代码
package com.log;
import org.apache.log4j.Logger;
public class Log4jTest
{
Logger logger = Logger.getLogger(this.getClass());
public void test()
{
logger.debug(“debug print”);
logger.info(“info print”);
logger.warn(“warn print”);
logger.error(“error print”);
}
/**
- @param args
*/
public static void main(String[] args)
{
new Log4jTest().test();
}
}
因配置的是ERROR,所以只输出error的信息
输出到日志文件
log4j.properties配置
DEBUG 日志优先级,stdout(自定义名字) 代表日志输出到那个地方
log4j.rootLogger= ERROR, stdout ,myLog
设置日志输出类型 appender负责控制日志记录操作的输出 ConsoleAppender:日志信息输出到控制台
log4j.appender.stdout= org.apache.log4j.ConsoleAppender
日志自定义格式
log4j.appender.stdout.layout= org.apache.log4j.PatternLayout
日志输出格式为 优先级、 [产生日志事件的线程名]、日志信息、换行
log4j.appender.stdout.layout.ConversionPattern= %5p [%t] %m%n
输出到日志文件
log4j.appender.myLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.myLog.File = E:\testlog\log4j\server.log
log4j.appender.myLog.Append = true
只输出DEBUG级别以上的日志
log4j.appender.myLog.Threshold = DEBUG
#'.'yyyy-MM-dd: 每天产生一个新的文件
log4j.appender.myLog.DatePattern = '.'yyyy-MM-dd
log4j.appender.myLog.layout = org.apache.log4j.PatternLayout
log4j.appender.myLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n
log4j.additivity.myLog = false
测试代码还是之前的,运行结果如下:
自定义文本方式
每天记录一个日志文件,这个日志文件把今天比较重要的日志记录下来。
每个日志文件记录的形式(时间+组装好的内容),如下 :
是不是有个疑问,如果有多个服务器,日志是记录到代码执行的这个服务器上了,外面访问进来肯定会访问到不同的服务器上了,日志文件也肯定存在多个咯,查问题的时候不就得一个个服务器的日志都翻一遍,烦人吗不是,这个时候你请搞工程的兄弟吃个夜宵他就会告诉你,其实服务器是可以搞成共享一个目录的,多个服务器访问同一个日志文件也是可以的(具体我就不讲了),但说实话这种方式我们现在也只是偶尔用一下。
示意代码
package com.log;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileLog {
public static void writeLog(String file, String conent) {
BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file, true)));
out.write(conent);
out.newLine();//换行
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
- @param args
*/
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd”);
SimpleDateFormat dfTime = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
Date date = new Date();
//当前时间 方便日志查看
String curTime = dfTime.format(date);
//yyyy-MM-dd格式的,为了每日更换日志文件
String curDay = df.format(date);
//组装日志内容
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
方便日志查看
String curTime = dfTime.format(date);
//yyyy-MM-dd格式的,为了每日更换日志文件
String curDay = df.format(date);
//组装日志内容
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
[外链图片转存中…(img-3QUkjpur-1714374575407)]