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 ...
随机推荐
- Flask中的CBV
Flask中的CBV 第一种 class Index(views.MethodView): methods = ['GET', 'POST'] decorators = [] def get(self ...
- layui中,同一个页面动态加载table数据表格
效果图: 前端代码: <div class="layui-fluid" id="record-user" hidden="hidden" ...
- vCenter server 的部署和实施
上一次我们讲解了vclient 5.5 的安装以及连接ESXI5.5,但vclient只能管理一台ESXI,管理多台还需要切换登陆,非常麻烦.所以这次我们就来讲解一下vcenter server的相关 ...
- IE9样式错乱,IE11无法正常加载v-loading等问题 引入了babel-polyfill插件,依然出现”polyfill-eventsource added missing EventSource to window”的奇怪问题(ie所有版本都有出现)
第一步:安装babel-ployfill (已安装请跳过此步骤) yarn add babel-ployfill 修改webpack打包配置文件:webpack.bash.conf.js // 引入b ...
- ThreadLocal源码调试——“this”作为key
前言:在一次面试过程中被问到ThreadLocal,大家都知道ThreadLocal可以为每个线程单独提供一个副本,从而实现变量间的隔离.在ThreadLocal中set和get操作的key是什么,T ...
- centos7下安装docker(25docker swarm---replicated mode&global mode)
swarm可以在service创建或运行过程中灵活的通过--replicas调整容器的副本数量,内部调整调度器则会根据当前集群资源使用的情况在不同的node上启动或停止容器,这就是service默认的 ...
- VBA果然很强大
1.我的是office 2007,新建空白文档-开发工具 -visual basic -project -thisDocument - Document_Open ,写入以下代码(并另存为word ...
- 启动PHP study时提示80端口或者3306端口被占用的解决办法
一.查看PID WIN+R打开命令行------>netstat -ano+回车,就会显示下面的信息: 二.打开任务管理器 Ctrl+Alt+Delete------>任务管理器,找到对应 ...
- [matlab] 22.matlab图论实例 最短路问题与最小生成树 (转载)
最短路问题之 Floyd 某公司在六个城市 c1c1,c2c2,….,c6c6 中有分公司,从 cici 到 cjcj 的直接航程票价记在下述矩阵的 (ii,jj) 位置上. (∞∞表示无直接航路), ...
- USB知识汇总
概述 通用串行总线(英语:Universal Serial Bus,缩写:USB)是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通 ...