Java 常见编码格式——URL、Base64
一、前言
Log4j目前使用的有两个版本,分别是v1.x和2.x,相关的信息可以查看官方文档:http://logging.apache.org/log4j/2.x/index.html
二、引入依赖
本文介绍log4j 2的用法,所以引入v2的jar包
<!--https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
三、配置log4j
可以参考官方文档:http://logging.apache.org/log4j/2.x/manual/configuration.html
log4j v1使用properties文件进行配置;而log4j v2,常见的做法是使用xml进行配置。
在resources目录下创建一个log4j2.xml,注意不是log4j.xml,先看下面的一个简单的配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="log_to_console" target="SYSTEM_OUT">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</Console> <File name="log_to_file" fileName="/opt/logs/app.log">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</File>
</Appenders> <Loggers>
<Root level="info">
<AppenderRef ref="log_to_console"/>
</Root>
</Loggers>
</Configuration>
上面这个配置中,<Configuration>下有<Appenders>和<Loggers>两个标签。
其中<Appenders>可以理解为日志的输出方式,可以是日志文件(File),也可以是可控制台输出(Console)。
3.1、<appenders>配置日志输出方式
日志输出方式一般有两种,控制台输出(Console)和日志文件输出(File),在log4j 2中,分别对应<Console>和<File>标签。
<Appenders>
<Console name="log_to_console" target="SYSTEM_OUT">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</Console> <File name="log_to_file" fileName="/opt/logs/app.log">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</File>
</Appenders>
上面定义了两个日志输出方式:
Console的输出方式,名称为log_to_console(这个名称是为了后面需要引用它),输出到SYSTEM_OUT(也就是控制台了);
File的输出方式,名称为log_to_file(名称可以随意指定),然后指定了日志文件的路径为/opt/logs/app.log。
Console和File,其实可以统称为<Appender>(因为在<Appenders>标签下嘛)。
这两个标签都有一个<PatternLayout>标签,这就是指定输出的日志格式,具体的格式可以查看官方文档。
虽然日志有Console和File两种形式,但是还是<Appenders>中却可以配置多个Appender,比如虽然都为日志文件输出形式,但是文件名不同,就是不同的Appender,并不会冲突:
<Appenders>
<Console name="log_to_console" target="SYSTEM_OUT">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</Console> <File name="log_to_file" fileName="/opt/logs/app.log">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</File> <!-- 再定义一个日志文件输出的Appender -->
<File name="log_to_file_two" fileName="/opt/logs/app_2.log">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</File>
</Appenders>
3.2、<Loggers>配置日志级别
log4j 2有trace、debug、info、warn、error、fatal这几种日志级别,按照顺序严重程度递增。
而<Loggers>可以理解配置不同的日志级别使用不同的日志输出方式,看下面的配置:
<Loggers>
<Root level="error">
<AppenderRef ref="log_to_file"/>
</Root> <logger level="info">
<AppenderRef ref="log_to_console"/>
</logger> <logger level="warn">
<AppenderRef ref="log_to_file_two"/>
</logger>
</Loggers>
上面的配置中,配置了三个<logger>(<Root>也算一个<logger>),每一个<logger>下面有一个<AppenderRef>,指定以什么形式输出日志(File还是Console)。
<Root>是一个比较特殊的<logger>,用来定义全局的日志界别,
一个<logger>下面可以有一个或者多个<AppenderRef>:
1、上面定义了全局的,只要是error级别或者比如error更高,都会将将日志写到/opt/logs/app.log中(log_to_file是前面<Appenders>中配置的);
2、日志界别为info或者比info更高的级别,就会将日志输出到控制台(log_to_console是前面<Appenders>中配置的);
3、日志界别为warn或者比warn更高的级别,就会将日志输出到/opt/logs/app_2.log(log_to_file_two是前面<Appenders>中配置的);
3.3、稍微拓展
一个级别的日志,比如info日志,我们可能既需要输出到控制台,也需要输出到日志文件中。
log4j 2可以这样做,前面已经说过了,一个<logger>下可以有多个<AppenderRef>,比如下面这段配置:
<Loggers>
<Root level="error">
<AppenderRef ref="log_to_file"/>
</Root> <!-- info或比info更高级别的日志,既输出到控制台,也输出到日志文件中-->
<logger level="info">
<AppenderRef ref="log_to_console"/>
<AppenderRef ref="log_to_file"/>
</logger>
</Loggers>
3.4、结合<Appenders>和<loggers>
有了前面的了解,下面是一个例子,就可以理解了:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="log_to_console" target="SYSTEM_OUT">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</Console> <Console name="log_to_console_two" target="SYSTEM_OUT">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</Console> <File name="log_to_file" fileName="/opt/logs/app.log">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</File> <File name="log_to_file_two" fileName="/opt/logs/app_2.log">
<PatternLayout pattern=" %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %logger{36} - %msg%n"/>
</File>
</Appenders> <Loggers>
<Root level="error">
<AppenderRef ref="log_to_console"/>
<AppenderRef ref="log_to_file"/>
</Root> <logger level="info">
<AppenderRef ref="log_to_console"/>
<AppenderRef ref="log_to_file"/>
</logger> <logger level="warn">
<AppenderRef ref="log_to_console_two"/>
</logger>
</Loggers>
</Configuration>
Java 常见编码格式——URL、Base64的更多相关文章
- Java常见的乱码解决方式
JAVA几种常见的编码格式(转) 简介 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码 ...
- JAVA常见中文问题的解决方法(转)
JAVA常见中文问题的解决方法 http://www.java-cn.com/club/article-5876-1.html 以下解决方案是笔者在日常生活中遇到的,希望能对你解决JAVA中文问题有所 ...
- Java常见加密技术的密钥与加密串长度
Java常见的Java方式 1.Base64编码 2.十六进制(Hex)编码 3.MD消息摘要 4.DES加密 5.3DES加密 6.AES加密 6.RSA加密
- Java 8中的Base64编码和解码
转自:https://juejin.im/post/5c99b2976fb9a070e76376cc Java 8会因为将lambdas,流,新的日期/时间模型和Nashorn JavaScript引 ...
- java常见的 http 请求库比较
java常见的http请求库有httpclient,RestTemplate,OKhttp,更高层次封装的 feign.retrofit 1.HttpClient HttpClient:代码复杂,还得 ...
- 如何用java实现图片与base64转换
如果你是一个软件开发,不论前端后端工程师,图片的处理你是肯定要会的,关于图片的Base64编码,你可能有点陌生,但是这是一个软件工程师应该要掌握的知识点,现在很多网友把图片与base64转换都做成了小 ...
- java后台调用url无协议
url格式不正确,可能有"www.baidu.com" "这个不能有 // 下载pdf public void downpdf(String URL, String ...
- Java常见的几种内存溢出及解决方法
Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...
- Java文件编码格式转换
转自博文<Java文件编码格式转换>: 默认被转换的格式为GBK,转换成的格式为UTF-8 import info.monitorenter.cpdetector.CharsetPrint ...
随机推荐
- February 22nd, 2018 Week 8th Thursday
Confine yourself to the present. 着眼当下. The morning wind spreads its fresh smell, we should get up an ...
- JavaScript函数式编程
一段糟糕透顶的海鸥seagulls程序 鸟群合并conjoin则变成了一个更大的鸟群,繁殖breed则增加了鸟群的数量,增加的数量就是它们繁殖出来的海鸥的数量 //Flock 群 var ...
- 新近碰到的病毒(TR.Spy.Babonock.A)
先来段Microsoft的说明: Worm:Win32/Babonock.A Alert level: Severe Detected with Windows Defender Antivirus ...
- cf 20190307 Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round)
B. Mike and Children time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- Matplotlib 绘图 用法
Matplotlib基础知识 一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis 水平和垂直的轴线 x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括 ...
- WPF 使用Console.Write打印信息到控制台窗口中
WPF中使用Console.Write函数来打印信息是没有意义的,因为并没有给其输出字符的窗口.对于桌面程序来说,这是十分合理的,然而有时为了方便调试,在程序编写过程中打印出信息给程序员看还是必要的, ...
- 转://如何增加linux根目录的磁盘空间(基于LVM)?
问题引出: 在测试过程中替换so文件,报磁盘空间不足的错误. ▲问题分析: 由于当时系统部署架构的考虑,把软件和数据库部署在了同一台机器上,并且给了30G的磁盘空间.系统上占用磁盘空间的有2部分,一是 ...
- P1824 进击的奶牛(二分)
思路:把检验的函数说一下,就是检测的距离x时,是否存在c个隔断相离大于等于x,如果是则返回1,不是则返回0 #include<iostream> #include<cstdio> ...
- python 那些我记不清的函数
eval 函数:用来计算在字符串中的有效Python表达式,并返回一个对象......将字符串变回数据类型 enumerate函数:加上序号 isinstance函数:判断数据类型 isinstanc ...
- 06 python初学 (列表内置方法)
目录: type(a) is list :判断 a 是不是列表.返回 True False count:计算列表内某一元素出现的次数 extend:在列表末尾一次性添加另一列表中的全部值 index: ...