java启动jar包将日志打印到文本的简单操作
作者:Wales_ 发布时间:2021-12-05 10:42:21
启动命令:
java -jar weichi-1.0.0.jar
将命令打印到1.log上
java -jar weichi-1.0.0.jar > 1.log
补充知识:Java中日志的使用(包含指定日志信息输出到指定地方)
一、前言
对于我们开发者而言,日志存在的意义十分重大;本文主要是自己整理了关于日志的一些知识点,希望能帮助到需要的人,也希望各位能指出我的错误。
二、日志的作用
① 记录运行信息,方便调试
② 记录错误信息,方便排查错误
③ 存储运行记录,方便后期的数据分析
三、日志的主要知识点:三大组件
1.Loggers 组件
1.1作用:
设置日志级别,决定什么日志信息应该被输出、什么日志信息应该被忽略。
1.2.分类:
DEBUG < INFO< WARN < ERROR < FATAL
一般情况下,子类中的级别设置会覆盖根root中的logger,且一般子类默认的级别为INFO,所以个人觉得根root中设置拦截级别似乎没什么作用。
1.3.例子:
配置根Logger
log4j.rootLogger= [ level ] , appenderName1, appenderName2
注意:根logger 具有继承性,他下属的appednerName均继承自他,比如继承了日志拦截级别等,当然,下属也可覆盖掉来着父类的日志拦截级别(Threshold)。如果不想继承,那么设置如下:log4j.additivity.org.apache=false
2.Appenders 组件
2.1.作用:
设置日志输出的位置以及其他相关的信息
2.2.语法:
(appenderName 为日志名,需要在rootlogger中声明或者使用自定义声明,自定义声明具体看指定日志信息输出到指定地方那部分;className输出的类,具体看下面;potion1=value1是其他相关的配置,比如配置输出位置,输出的级别的信息)
log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1
…
log4j.appender.appenderName.OptionN = valueN
2.3.className 的相关类
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
2.4.例子
3.Layout组件
3.1作用:
决定了输出日志的格式
3.2.类型
. org.apache.log4 j.HTMLLayout(以HTML表格形式布局);
. org.apache.log4 j.PatternLayout(可以灵活地指定布局模式);
. org.apache.log4 j.SimpleLayout(包含日志信息的级别和信息字符串);
. org.apache.log4 j.TTCCLayout(包含日志产生的时间、线程和类别等信息);
3.3.输出格式的定义ConversionPattern
符号 描述
%r 自程序开始后消耗的毫秒数
%t 表示日志记录请求生成的线程
%p 表示日专语句的优先级
%r 与日志请求相关的类别名称
%c 日志信息所在的类名
%m%n 表示日志信息的内容
3.4.例子
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[VAMS][%d] %p | %m | [%t] %C.%M(%L)%n
三、总结例子(包含指定日志信息输出到指定地方)
1.配置文件
配置文件默认存放在src目录下,名字为log4j.properties
log4j.rootLogger=DEBUG,MINA,file,logFile //注意包含了很多
## mina 设置日志发送到控制台
log4j.appender.MINA=org.apache.log4j.ConsoleAppender
log4j.appender.MINA.layout=org.apache.log4j.PatternLayout
log4j.appender.MINA.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p %c{1} %x - %m%n
## File 设置日志输出到指定大小的文件
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.Threshold=DEBUG //不继承父类的
log4j.appender.file.File=./log/mina.log //路径
log4j.appender.file.MaxFileSize=5120KB //大小
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[VAMS][%d] %p | %m | [%t] %C.%M(%L)%n
## logFile 设置日志输出到指定路劲
log4j.appender.logFile=org.apache.log4j.FileAppender
log4j.appender.logFile.Threshold=DEBUG
log4j.appender.logFile.ImmediateFlush=true (表示所有消息都会被立即输出)
log4j.appender.logFile.Append=true (rue表示消息增加到指定文件中,默认就是true)
log4j.appender.logFile.File=./log/log.log4j
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
2.简单调用
public class TestLog4j {
public static void main(String[] args) {
PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " ); //读取配置文件路径
Logger logger = Logger.getLogger(TestLog4j. class ); //加载本类
logger.debug( " debug " ); //设置此处debug级别输出的内容
logger.error( " error " ); //设置此处error级别输出的内容
}
}
★★3.将关于特定类的日志输出到特定的日志文件中
需求:我们想将类 A 中的日志输出,输出到一个单独的特定文件中
配置:
log4j.logger.signature=debug,signature //自定义输出
log4j.additivity.signature= false //不继承父类
log4j.appender.signature = org.apache.log4j.FileAppender //输出到指定地方
log4j.appender.signature.Append=true //输出不覆盖
log4j.appender.signature.File=./log/signature.log //输出到指定地址
log4j.appender.signature.layout=org.apache.log4j.PatternLayout
log4j.appender.signature.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
使用
public void test1(){
Logger logger = Logger.getLogger("signature");
logger.info("testinfo");
}
重点: 发挥主要作用的是 log4.additivity。 用于决定子logger是否继承父logger的appender。如果设置为false,那么子logger的输出只会输出到自己指定的文件/控制台下。而不会输出到父logger指定的文件/控制台下。
来源:https://blog.csdn.net/wanzhix/article/details/78922680


猜你喜欢
- 背景Android开发中,加载图片过多、过大很容易引起OutOfMemoryError异常,即我们常见的内存溢出。因为Android对单个应
- 本文实例为大家分享了Android自定义StepView配送进度展示的具体代码,供大家参考,具体内容如下效果图使用可在layout文件下设置
- 这篇文章主要介绍了通过Java实现bash命令过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 本文实例讲述了Java实现指定线程执行顺序的三种方式。分享给大家供大家参考,具体如下:方法一:通过共享对象锁加上可见变量来实现。public
- 这篇文章主要介绍了Java连接Linux服务器过程分析(附代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- java 打造阻塞式线程池的实例详解原来以为tiger已经自带了这种线程池,就是在任务数量超出时能够阻塞住投放任务的线程,主要想用在JMS消
- 本文实例讲述了java计算给定字符串中出现次数最多的字母和该字母出现次数的方法。分享给大家供大家参考,具体如下:import Java.ut
- 场景:假设每次我们去超市购物,我们都会推一个购物车,有水果、蔬菜、肉类三种商品,提供给我们选择,那么这时候,如果使用装饰器模式,应该如何实现
- 【前言】AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统
- Android application捕获崩溃异常怎么办?通用 application1、收集所有 avtivity 用于彻底退出应用2、捕
- 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代
- 通过继承Thread类并实现run方法创建一个线程// 定义一个Thread类,相当于一个线程的模板class MyThread01 ext
- 本文为大家分享了自己写的一个Pager分页组件,WebForm,Mvc都适用,具体内容如下分页控件其实就是根据链接在页面间传递参数,因为我看
- 什么是建造者模式建造者模式( Builder Pattern )是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 对于学习过C语言的朋友应该都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存
- 前言学过定时任务,但是我忘了,忘得一干二净,害怕,一直听别人说:你写一个定时任务就好了。写个定时任务让他去爬取就行了。我不会,所以现在得补回
- 昨天使用mybatis-plus。使用自动填充后发现了两个问题。一个是填充数据为null,一个是当使用了mybatis-plus的乐观锁,自
- 在选择排序中,从第一个元素开始,依次遍历数组中的元素,找出当前遍历元素之后的最小元素,与当前遍历元素交换位置,依此类推,是一种由前往后的排序
- JWT简介Json Web Token(JWT):JSON网络令牌,是为了在网络应用环境间传递声明而制定的一种基于JSON的开放标准((RF