spring boot log4j2boot jar包在linux下运行,log4j日志 中文乱码怎么办

交流与勘误可
之前介绍了在,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需要小部分采用DEBUG级别,而在生产环境时我们又希望采用INFO级别。这个时候,我们要自己手工编辑log4j.properties文件来调整日志级别,不论在版本库中默认保存哪个环境的级别设定,都会增加其他环境使用人员的工作量,虽然很细微,但是手工修改总不是一件很好的选择,难免会发现修改后误提交等问题。
那么,有没有办法对于开发人员、运维人员都不需要改变源代码实现不同环境的不同日志级别呢?
是否还记得之前在一文中,提到的关于Spring Boot多环境的配置以及属性文件中的参数引用?若没有了解过相关内容,建议先阅读该文后继续此篇内容。
尝试改造先以作为基础工程,我们来进行多环境配置的改造。
创建多环境配置文件
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
application.properties中添加属性:spring.profiles.active=dev(默认激活application-dev.properties配置)
application-dev.properties和application-test.properties配置文件中添加日志级别定义:.didispace=DEBUG
application-prod.properties配置文件中添加日志级别定义:.didispace=INFO
通过上面的定义,根据.didispace在不同环境的配置文件中定义了不同的级别,但是我们已经把日志交给了log4j管理,看看我们log4j.properties中对com.didispace包下的日志定义是这样的,固定定义了DEBUG级别,并输出到名为didifile定义的appender中。
12345678910log.didispace=DEBUG, didifilelog4j.appender.didifile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.didifile.file=logs/my.loglog4j.appender.didifile.DatePattern='.'yyyy-MM-ddlog4j.appender.didifile.layout=org.apache.log4j.PatternLayoutlog4j.appender.didifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n
那么,要如何动态的改变这个DEBUG级别呢?在中还提到了关于配置文件中参数的引用。我们需要将DEBUG替换成application-{profile}.properties配置文件中定义.didispace即可,所以配置变为如下内容:
12345678910log.didispace=${.didispace}, didifilelog4j.appender.didifile=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.didifile.file=logs/my.loglog4j.appender.didifile.DatePattern='.'yyyy-MM-ddlog4j.appender.didifile.layout=org.apache.log4j.PatternLayoutlog4j.appender.didifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n
到这里我们已经完成了所有配置工作,我们可以通过运行单元测试,然后看my.log文件中输出的日志内容。通过修改默认的application-dev.properties配置的日志级别为INFO,再运行单元测试的DEBUG内容是否被输出到了my.log中验证参数是否被正确引用了。
对于不同环境的使用人员也不需要改变代码或打包文件,只需要通过执行命令中参加参数即可,比如我想采用生产环境的级别,那么我可以这样运行应用:
12java -jar xxx.jar --spring.profiles.active=prod
如果您有任何想法或问题需要讨论或交流,可进入发表您的想法或问题。16:13 提问
spring boot 服务启动 log4j日志异常
15:52:01,088 main WARN Could not instantiate FastDateFormat with pattern YYYYMMddHHmmss java.lang.IllegalArgumentException: Illegal pattern component: YYYY
at org.apache.logging.log4j.core.util.datetime.FastDatePrinter.parsePattern(FastDatePrinter.java:264)
at org.apache.logging.log4j.core.util.datetime.FastDatePrinter.init(FastDatePrinter.java:124)
at org.apache.logging.log4j.core.util.datetime.FastDatePrinter.(FastDatePrinter.java:115)
at org.apache.logging.log4j.core.util.datetime.FastDateFormat.(FastDateFormat.java:100)
at org.apache.logging.log4j.core.util.datetime.FastDateFormat.(FastDateFormat.java:81)
at org.apache.logging.log4j.core.util.datetime.FastDateFormat$1.createInstance(FastDateFormat.java:61)
at org.apache.logging.log4j.core.util.datetime.FastDateFormat$1.createInstance(FastDateFormat.java:58)
at org.apache.logging.log4j.core.util.datetime.FormatCache.getInstance(FormatCache.java:82)
at org.apache.logging.log4j.core.util.datetime.FastDateFormat.getInstance(FastDateFormat.java:140)
at org.apache.logging.log4j.core.pattern.DatePatternConverter.createFormatter(DatePatternConverter.java:176)
at org.apache.logging.log4j.core.pattern.DatePatternConverter.(DatePatternConverter.java:132)
at org.apache.logging.log4j.core.pattern.DatePatternConverter.newInstance(DatePatternConverter.java:144)
at org.apache.logging.log4j.core.pattern.FileDatePatternConverter.newInstance(FileDatePatternConverter.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.logging.log4j.core.pattern.PatternParser.createConverter(PatternParser.java:548)
at org.apache.logging.log4j.core.pattern.PatternParser.finalizeConverter(PatternParser.java:601)
at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:385)
at org.apache.logging.log4j.core.appender.rolling.PatternProcessor.(PatternProcessor.java:69)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.(RollingFileManager.java:58)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:326)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:291)
at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:71)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:61)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:79)
at org.apache.logging.log4j.core.appender.RollingFileAppender.createAppender(RollingFileAppender.java:193)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:136)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:813)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:753)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:745)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:389)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:169)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:181)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:446)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:520)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:536)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:214)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:146)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:185)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:103)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:42)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at mons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
at mons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
at mons.logging.LogFactory.getLog(LogFactory.java:273)
at org.springframework.boot.SpringApplication.(SpringApplication.java:190)
at com.wjcard.ApplicationRun.main(ApplicationRun.java:25)
怀疑jar包问题
不过jar包和之前无变化 继续排查
按赞数排序
你的log4j.properties
配置的 年 是这样写的?
是的就改成小写的yyyy
其他相关推荐1117人阅读
软件架构(1)
酱油一篇,整理一下关于Spring Boot后台运行的一些配置方式。在介绍后台运行配置之前,我们先回顾一下Spring Boot应用的几种运行方式:
运行Spring Boot的应用主类使用Maven的Spring Boot插件mvn spring-boot:run来运行打成jar包后,使用java -jar运行
我们在开发的时候,通常会使用前两种,而在部署的时候往往会使用第三种。但是,我们在使用java -jar来运行的时候,并非后台运行。下面我们分别针对Windows和Linux/Unix两种环境,整理一下如何配置后台运行的方法。
Windows下比较简单,我们可以直接使用这款软件:AlwaysUp。如下图所示,简单、暴力、好用。
配置方式很简单,我们只需要把Spring Boot应用通过mvn install打成jar包,然后编写一个java -jar yourapp.jar的bat文件。再打开AlwaysUp,点击工具栏的第一个按钮,如下图所示,选择上面编写的bat文件,并填写服务名称。
完成了创建之后,在列表中可以看到我们配置的服务,通过右键选择Start xxx就能在后台将该应用启动起来了。
Linux/Unix
下面我们来说说服务器上该如何来配置。实际上,实现的方法有很多种,这里就列两种还比较好用的方式:
nohup和Shell
该方法主要通过使用nohup命令来实现,该命令的详细介绍如下:
nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ][ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加&&到命令的尾部。
所以,我们只需要使用nohup java -jar yourapp.jar &命令,就能让yourapp.jar在后台运行了。但是,为了方便管理,我们还可以通过Shell来编写一些用于启动应用的脚本,比如下面几个:
关闭应用的脚本:stop.sh
#!/bin/bash
PID=$(ps -ef | grep yourapp.jar | grep -v grep | awk&'{ print $2 }')
if [ -z&&$PID&
echo Application is already stopped
echo&kill&$PID
启动应用的脚本:start.sh
#!/bin/bash
nohup java -jar yourapp.jar --server.port=8888 &
整合了关闭和启动的脚本:run.sh,由于会先执行关闭应用,然后再启动应用,这样不会引起端口冲突等问题,适合在持续集成系统中进行反复调用。
#!/bin/bash
echo stop application
source stop.sh
echo start application
source start.sh
在Spring Boot的Maven插件中,还提供了构建完整可执行程序的功能,什么意思呢?就是说,我们可以不用java -jar,而是直接运行jar来执行程序。这样我们就可以方便的将其创建成系统服务在后台运行了。主要步骤如下:
在pom.xml中添加Spring Boot的插件,并注意设置executable配置
在完成上述配置后,使用mvn install进行打包,构建一个可执行的jar包
创建软连接到/etc/init.d/目录下
sudo ln&-s /var/yourapp/yourapp.jar /etc/init.d/yourapp
在完成软连接创建之后,我们就可以通过如下命令对yourapp.jar应用来控制启动、停止、重启操作了
/etc/init.d/yourapp start|stop|restart
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:169350次
积分:3597
积分:3597
排名:第9248名
原创:173篇
转载:94篇
评论:24条
(1)(1)(1)(6)(7)(5)(9)(10)(6)(8)(20)(10)(13)(6)(12)(33)(8)(7)(6)(31)(7)(13)(19)(19)(9)&&&&&&&&&&&&&&&&&&
posts - 60,comments - 71,trackbacks - 0
我参与的团队
资源与技术网站
阅读排行榜
评论排行榜
&&&&现在log4j使用非常流行,在WINDOW系统使用中,没碰到乱码问题,但最近在LINUX环境中,碰到了乱码问题,解决方法只需在Log4j.xml(本人使用的是此格式的配置文件)中,设置&param name="Encoding" value="UTF-8"/&属性,即可解决.
1) 经本人测试,只有将字符编码设为"UTF-8",才能解决乱码问题,如果设为:GB2312,GBK等都还是会出现乱码;
2) 只需在此处设置下字符编码即可,不需在程序中对要输出的内容进行编码,而且即使对输出的内容进行编码,也无济于事,还是会出现乱码的情况.
阅读(1620)log4j(2)
近日在AIX上用log4j打印日志,出现乱码,经过努力解决问题。
症状:在默认语言非中文(或者说默认语言不支持中文的)的Windows、、Unix上,用log4j打印日志,出现乱码,常见的就是一堆问号。
解决方法:
如果是log4j.properties为配置文件,比如:
[c-sharp]&&
加入一行:
[c-sharp]&&
如果是log4j.xml为配置文件,比如:
[c-sharp]&&
加入一行:
[c-sharp]&&
log4j通过QuietWriter写日志,QuietWriter extends FilterWriter,FilterWriter extends Writer,而Writer写入的是字符流,对字符集比较敏感。英文系统一般默认latin-1字符集,只能处理半角,通过encoding指定字符集后,能够正确输出指定字符集的字符流。
字符集指定后,WriterAppender的setEncoding通过org.apache.log4j.config.PropertySetter.setProperties(Object obj, Properties properties, String prefix)设置字符集。
文章来源:http://blog.csdn.net/inkfish/article/details/4761357
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:991316次
积分:9833
积分:9833
排名:第1803名
原创:253篇
转载:83篇
评论:93条
(6)(2)(4)(2)(7)(3)(17)(6)(9)(1)(11)(11)(9)(10)(6)(11)(7)(3)(6)(13)(6)(12)(8)(1)(5)(10)(7)(7)(10)(11)(8)(6)(11)(8)(2)(6)(4)(9)(3)(1)(1)(5)(5)(3)(15)(11)(9)(7)(2)}

我要回帖

更多关于 springboot log4j 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信