JAVA log日志系统
source link: https://segmentfault.com/a/1190000040955275
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
JAVA log日志系统
今天讲一下java的日志级别,非log4j/slf4j日志
Level描述OFF不打印任何SEVERE严重的错误WARNING潜在的问题警告INFO普通的信息CONFIG配置的信息,例如cpu信息,多少内存等FINE普通的开发人员信息FINER详细深入的开发人员系信息FINEST专业的开发人员信息ALL最低级别全部打印日志级别打印
static Logger logger = LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME); public static void main(String[] args) { // LogManager logManager = LogManager.getLogManager(); // Logger logger = logManager.getLogger(Logger.GLOBAL_LOGGER_NAME); logger.log(Level.INFO,"My First log"); logger.log(Level.INFO,"Another message"); testLevel(); logger.severe("oh no!"); logger.info("Just info"); logger.fine("He Developer dud"); } public static void testLevel(){ logger.setLevel(Level.INFO); logger.log(Level.SEVERE,"oh no!"); logger.log(Level.INFO, "Just info"); logger.log(Level.FINE,"He Developer dud"); logger.log(Level.FINEST,"Secial developer"); } 三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest main 信息: My First log 三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest main 信息: Another message 三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest testLevel 严重: oh no! 三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest testLevel 信息: Just info 三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest main 严重: oh no! 三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest main 信息: Just info
logp方法打印可以自定义类名以及方法
logger.logp(Level.INFO,"com.example.demo.pluralsight.log.LogTest1","main1","logp info"); 三月 02, 2020 11:52:15 下午 com.example.demo.pluralsight.log.LogTest1 main1 信息: logp info
自定义handler
Handler h = new ConsoleHandler(); Formatter f = new SimpleFormatter(); h.setFormatter(f); logger.addHandler(h); logger.setLevel(Level.INFO); logger.log(Level.INFO,"We're loging"); 三月 04, 2020 12:26:10 上午 com.example.demo.pluralsight.log.LogTest handlerLogger 信息: We're loging 三月 04, 2020 12:26:10 上午 com.example.demo.pluralsight.log.LogTest handlerLogger 信息: We're loging
常用日志输出的handler:
ConsoleHandler,写入System.err输出到执行命令行窗口中。
StreamHandler,输出到OutputStream中
SocketHandler,输出到指定主机名和端口号的套接字中。
FileHandler,可以输出到单个文件中,也可输出到滚动文件集中(按照指定的大小,文件个数等滚动输出)。
其中FileHandler的Pattern
标识符描述/表示路径,windows下则为\,比如写为文件 ./foo.log%t表示系统的任何temp目录,%t/foo.log表示/var/tmp/foo.log或者C:\Users\Xuesong.bu\AppData\Local\Temp\foo.log%h用户的home目录,%h/foo.log表示/var/users/Xueosng.bu/foo.log或者C:\Users\Xuesong.Bu\foo.log%g循环写入的文件。foo_%g.log表示先写入foo_0.log当写满后再写入foo_1.log之后foo_2.log之后再清除foo_0.log,重新写入foo_0.log依次循环写入滚动输出日志
public static void fileHandlerTest() throws Exception{ FileHandler h = new FileHandler("%h/myapp_%g.log",1000,4); h.setFormatter(new SimpleFormatter()); logger.addHandler(h); int i= 0 ; while(i<10000){ logger.log(Level.INFO,"==============="); i++; } }
log的两种Formatter
XMLFormatter:格式化的XML,带有根元素,每个条目位于record的节点下面
SimpleFormatter:格式化简单文本,可以按照标准字符串的表示法进行格式化,
以下是一个标准的日志格式化输出的内容,其中5$代表Format中的message,2$表示source(class & method)
String.Format(format,date,source,logger,level,message,thrown); 通过java命令 java -Djava.util.logging.SimpleFormatter.format=%5$s,%2$s,%4$s%n com.example.demo.pluralsight.log.Main 输出日志 This is message,com.example.demo.pluralsight.log.LogTest Main,INFO
或者是直接通过修改日志默认配置文件,其中Handler可以分级,父级别子级分别输出,log.properties设置了两种handler,com.pluralsight和com.pluralsight.Main两种,一个为FileHandler另一个为ConsoleHandler,同class的包级别一样,com.plurasight是com.pluralsight.Main父级别handler
log.properties java.util.logging.ConsoleHandler.level=INFO java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter com.pluralsight.handlers=java.util.logging.ConsoleHandler com.pluralsight.level=INFO java.util.logging.SimpleFormatter.format=%5$s,%2$s,%4$s%n java.util.logging.FileHandler.level=ALL java.util.logging.FileHandler.pattern=./main_%g.log com.pluralsight.Main.handlers=java.util.logging.FileHandler com.pluralsight.Main.level=ALL
通过下面的java -D来执行Main类,并输出如下结果
public class Main { public static void main(String[] args) { Logger loggerParent = Logger.getLogger("com.pluralsight"); Logger logger = Logger.getLogger("com.pluralsight.Main"); logger.log(Level.INFO,"We are logging"); logger.log(Level.FINE,"We are logging fine"); } } java -Djava.util.logging.config.file=log.properties com.example.demo.pluralsight.log.Main 输出结果: We are logging,com.example.demo.pluralsight.log.Main main,信息
以及生成了main_0.log其中内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE log SYSTEM "logger.dtd"> <log> <record> <date>2020-03-05T16:37:44</date> <millis>1583397464390</millis> <sequence>0</sequence> <logger>com.pluralsight.Main</logger> <level>INFO</level> <class>com.example.demo.pluralsight.log.Main</class> <method>main</method> <thread>1</thread> <message>We are logging</message> </record> <record> <date>2020-03-05T16:37:44</date> <millis>1583397464400</millis> <sequence>1</sequence> <logger>com.pluralsight.Main</logger> <level>FINE</level> <class>com.example.demo.pluralsight.log.Main</class> <method>main</method> <thread>1</thread> <message>We are logging fine</message> </record> </log>
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK