<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>log4j &#8211; 编码无悔 /  Intent &amp; Focused</title>
	<atom:link href="https://www.codelast.com/tag/log4j/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.codelast.com</link>
	<description>最优化之路</description>
	<lastBuildDate>Fri, 28 Jan 2022 18:58:34 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>[原创] 在IntelliJ中运行Java unit test(单元测试)时打印出&quot;log4j:ERROR Either File or DatePattern options are not set for appender&quot;的问题</title>
		<link>https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%9c%a8intellij%e4%b8%ad%e8%bf%90%e8%a1%8cjava-unit-test%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95%e6%97%b6%e6%89%93%e5%8d%b0%e5%87%balog4jerror-either-file-or-datepattern-option/</link>
					<comments>https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%9c%a8intellij%e4%b8%ad%e8%bf%90%e8%a1%8cjava-unit-test%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95%e6%97%b6%e6%89%93%e5%8d%b0%e5%87%balog4jerror-either-file-or-datepattern-option/#respond</comments>
		
		<dc:creator><![CDATA[learnhard]]></dc:creator>
		<pubDate>Fri, 28 Jan 2022 18:52:18 +0000</pubDate>
				<category><![CDATA[原创]]></category>
		<category><![CDATA[IntelliJ]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[单元测试]]></category>
		<category><![CDATA[日志]]></category>
		<guid isPermaLink="false">https://www.codelast.com/?p=13449</guid>

					<description><![CDATA[<p>当你在IntelliJ&#160;idea中跑一个Java单元测试时，可能会发现单元测试本身没有任何问题，可以成功执行，但是IntelliJ的日志输出窗口里却打印出大量的&#8220;错误&#8221;日志，类似于下面这样：<br />
<span id="more-13449"></span></p>
<blockquote>
<div>
		<span style="font-size:14px;">log4j:ERROR setFile(null,true) call failed.</span></div>
<div>
		<span style="font-size:14px;">java.io.FileNotFoundException: / (Is a directory)</span></div>
<div>
		<span style="font-size:14px;">at java.io.FileOutputStream.open0(Native Method)</span></div>
<div>
		<span style="font-size:14px;">at java.io.FileOutputStream.open(FileOutputStream.java:270)</span></div>
<div>
		<span style="font-size:14px;">at java.io.FileOutputStream.&#60;init&#62;(FileOutputStream.java:213)</span></div>
<div>
		<span style="font-size:14px;">at java.io.FileOutputStream.&#60;init&#62;(FileOutputStream.java:133)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)</span></div></blockquote>&#8230; <a href="https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%9c%a8intellij%e4%b8%ad%e8%bf%90%e8%a1%8cjava-unit-test%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95%e6%97%b6%e6%89%93%e5%8d%b0%e5%87%balog4jerror-either-file-or-datepattern-option/" class="read-more">Read More </a>]]></description>
										<content:encoded><![CDATA[<p>当你在IntelliJ&nbsp;idea中跑一个Java单元测试时，可能会发现单元测试本身没有任何问题，可以成功执行，但是IntelliJ的日志输出窗口里却打印出大量的&ldquo;错误&rdquo;日志，类似于下面这样：<br />
<span id="more-13449"></span></p>
<blockquote>
<div>
		<span style="font-size:14px;">log4j:ERROR setFile(null,true) call failed.</span></div>
<div>
		<span style="font-size:14px;">java.io.FileNotFoundException: / (Is a directory)</span></div>
<div>
		<span style="font-size:14px;">at java.io.FileOutputStream.open0(Native Method)</span></div>
<div>
		<span style="font-size:14px;">at java.io.FileOutputStream.open(FileOutputStream.java:270)</span></div>
<div>
		<span style="font-size:14px;">at java.io.FileOutputStream.&lt;init&gt;(FileOutputStream.java:213)</span></div>
<div>
		<span style="font-size:14px;">at java.io.FileOutputStream.&lt;init&gt;(FileOutputStream.java:133)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)</span></div>
<div>
		<span style="font-size:14px;">at org.apache.log4j.LogManager.&lt;clinit&gt;(LogManager.java:127)</span></div>
<div>
		<span style="font-size:14px;">at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)</span></div>
<div>
		<span style="font-size:14px;">at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)</span></div>
<div>
		<span style="font-size:14px;">at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)</span></div>
<div>
		<span style="font-size:14px;">&nbsp; &nbsp; (后面很长，省略)</span></div>
<div>
		<span style="font-size:14px;"><span style="color:#ff0000;">log4j:ERROR Either File or DatePattern options are not set for appender [LOCAL].</span></span></div>
</blockquote>
<p>这和你的单元测试没有任何关系，它是因为程序中使用的日志库&nbsp;log4j 在默认的路径下找不到log4j配置文件导致的。如果你的项目使用了标准的目录布局，那么应该在 <span style="color:#0000ff;">resources</span>&nbsp;目录下有一个&nbsp;<span style="color:#0000ff;">log4j.properties</span>&nbsp;配置文件，类似于下面这样：</p>
<section class="output_wrapper" id="output_wrapper_id" style="font-size: 16px; color: rgb(62, 62, 62); line-height: 1.6; letter-spacing: 0px; font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;">
<pre style="font-size: inherit; color: inherit; line-height: inherit; margin-top: 0px; margin-bottom: 0px; padding: 0px;">
<code class="javascript language-javascript hljs" style="margin: 0px 2px; line-height: 18px; font-size: 14px; letter-spacing: 0px; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0px; color: rgb(169, 183, 198); background: rgb(40, 43, 46); padding: 0.5em; overflow-wrap: normal !important; word-break: normal !important; overflow: auto !important; display: -webkit-box !important;">└──&nbsp;test
&nbsp;&nbsp;&nbsp;&nbsp;├──&nbsp;java
&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;└──&nbsp;com
&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└──&nbsp;codelast
&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└──&nbsp;MyUnitTest.java
&nbsp;&nbsp;&nbsp;&nbsp;└──&nbsp;resources
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└──&nbsp;log4j.properties
</code></pre>
</section>
<p> 其中 test 目录下存放所有和单元测试相关的代码文件以及配置文件，下面有两个平级的目录：java 和 resources。<br />
log4j.properties文件的内容：</p>
<section class="output_wrapper" id="output_wrapper_id" style="font-size: 16px; color: rgb(62, 62, 62); line-height: 1.6; letter-spacing: 0px; font-family: &quot;Helvetica Neue&quot;, Helvetica, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif;">
<pre style="font-size: inherit; color: inherit; line-height: inherit; margin-top: 0px; margin-bottom: 0px; padding: 0px;">
<code class="javascript language-javascript hljs" style="margin: 0px 2px; line-height: 18px; font-size: 14px; letter-spacing: 0px; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0px; color: rgb(169, 183, 198); background: rgb(40, 43, 46); padding: 0.5em; overflow-wrap: normal !important; word-break: normal !important; overflow: auto !important; display: -webkit-box !important;">log4j.rootLogger=INFO,stdout
log4j.appender.stdout&nbsp;=&nbsp;org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target&nbsp;=&nbsp;System.out
log4j.appender.stdout.layout&nbsp;=&nbsp;org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern&nbsp;=&nbsp;%d{<span class="hljs-attr" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(165, 218, 45); word-wrap: inherit !important; word-break: inherit !important;">HH</span>:mm:ss}&nbsp;[%p]:%m%n
</code></pre>
</section>
<p>这样你再运行 IntelliJ 里的单元测试，就不会打印出上面那些超长的错误日志了。<br />
<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">https://www.codelast.com/</span></a><br />
<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;版权声明&nbsp;<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;<br />
转载需注明出处：<u><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><em><span style="color: rgb(0, 0, 255);"><strong style="font-size: 16px;"><span style="font-family: arial, helvetica, sans-serif;">codelast.com</span></strong></span></em></a></u>&nbsp;<br />
感谢关注我的微信公众号（微信扫一扫）：<br />
<img decoding="async" alt="wechat qrcode of codelast" src="https://www.codelast.com/codelast_wechat_qr_code.jpg" style="color: rgb(77, 77, 77); font-size: 13px; width: 200px; height: 200px;" /><br />
以及我的微信视频号：</p>
<p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px; color: rgb(77, 77, 77);">
	<img decoding="async" alt="" src="https://www.codelast.com/wechat_shipinhao_qr_code.jpg" style="text-align: center; width: 200px; height: 199px;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%9c%a8intellij%e4%b8%ad%e8%bf%90%e8%a1%8cjava-unit-test%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95%e6%97%b6%e6%89%93%e5%8d%b0%e5%87%balog4jerror-either-file-or-datepattern-option/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[原创] log4cxx在Linux下的安装、使用</title>
		<link>https://www.codelast.com/%e5%8e%9f%e5%88%9b-log4cxx%e5%9c%a8linux%e4%b8%8b%e7%9a%84%e5%ae%89%e8%a3%85%e3%80%81%e4%bd%bf%e7%94%a8/</link>
					<comments>https://www.codelast.com/%e5%8e%9f%e5%88%9b-log4cxx%e5%9c%a8linux%e4%b8%8b%e7%9a%84%e5%ae%89%e8%a3%85%e3%80%81%e4%bd%bf%e7%94%a8/#comments</comments>
		
		<dc:creator><![CDATA[learnhard]]></dc:creator>
		<pubDate>Tue, 09 Aug 2011 06:26:05 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[-lexpat]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[apr]]></category>
		<category><![CDATA[apr-util]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[http://logging.apache.org/log4cxx/]]></category>
		<category><![CDATA[log4c]]></category>
		<category><![CDATA[log4cxx]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[properties文件]]></category>
		<category><![CDATA[RedHat]]></category>
		<category><![CDATA[RHEL]]></category>
		<category><![CDATA[undefined reference]]></category>
		<category><![CDATA[使用]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[格式]]></category>
		<category><![CDATA[编译]]></category>
		<category><![CDATA[配置文件]]></category>
		<category><![CDATA[问题]]></category>
		<guid isPermaLink="false">http://www.codelast.com/?p=3211</guid>

					<description><![CDATA[<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">简单地说，log4cxx就是一个记录日志的C++库（程序运行的时候要保存一些日志到文件，以供将来查看），它是从著名的Java日志库log4j移植而来的，并且它是Apache的一个项目，质量有保证，不用犹豫了，就用它吧！</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">补一句：Apache声称log4cxx的速度快、灵活性好，但是，速度快是第一位的，灵活性是第二位的（&#34;<span style="color:#800080;">Log4cxx claims to be fast and flexible: speed first, flexibility second.</span>&#34;），所以，担心日志记录性能的同学更可以选择log4cxx啦。</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">但是，这玩意的安装、编译稍微有点麻烦，如果遇到了问题，没耐心的人可能就没兴趣折腾了，我在这里把自己遇到的问题记一下。</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">系统环境：RHEL 5.3，64位</span></span></span></p>
<p>
	&#160;</p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span id="more-3211"></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">首先去log4cxx的官方网站下载源码安装包：<a href="http://logging.apache.org/log4cxx/" target="_blank" rel="noopener noreferrer">http://logging.apache.org/log4cxx/</a>，点击左边的&#8220;Download&#8221;进入下载页面，当前（2011年8月9日）的最新版本是0.10.0，你可以下载 .tar.gz 压缩包，解压出来即可。</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">然后就可以直接configure，make，make install了吗？不行，因为log4cxx官方提供的源码安装包不是一个all-in-one的包，它还依赖于Apache的另外两个库：Apache Portable Runtime（APR）和Apache Portable Runtime Utility（APR-Util），你可以在这个链接找到它们：<a href="http://apr.apache.org/" target="_blank" rel="noopener noreferrer">http://apr.apache.org/</a>。</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">（1）安装</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">安装顺序不能变。首先要安装APR，下载到源码安装包后，解压出来，然后：</span></span></span></p>
<pre class="brush:shell;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
./configure --prefix=/usr/local/apr
make
make install
</pre>
<p><span style="font-size: 14px; ">这里把APR安装到了 /usr/local/apr 目录下，注意，千万不要直接./configure，因为那样会把APR的文件安装到若干目录下，非常不利于维护。</span>&#8230; <a href="https://www.codelast.com/%e5%8e%9f%e5%88%9b-log4cxx%e5%9c%a8linux%e4%b8%8b%e7%9a%84%e5%ae%89%e8%a3%85%e3%80%81%e4%bd%bf%e7%94%a8/" class="read-more">Read More </a></p>]]></description>
										<content:encoded><![CDATA[<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">简单地说，log4cxx就是一个记录日志的C++库（程序运行的时候要保存一些日志到文件，以供将来查看），它是从著名的Java日志库log4j移植而来的，并且它是Apache的一个项目，质量有保证，不用犹豫了，就用它吧！</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">补一句：Apache声称log4cxx的速度快、灵活性好，但是，速度快是第一位的，灵活性是第二位的（&quot;<span style="color:#800080;">Log4cxx claims to be fast and flexible: speed first, flexibility second.</span>&quot;），所以，担心日志记录性能的同学更可以选择log4cxx啦。</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">但是，这玩意的安装、编译稍微有点麻烦，如果遇到了问题，没耐心的人可能就没兴趣折腾了，我在这里把自己遇到的问题记一下。</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">系统环境：RHEL 5.3，64位</span></span></span></p>
<p>
	&nbsp;</p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span id="more-3211"></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">首先去log4cxx的官方网站下载源码安装包：<a href="http://logging.apache.org/log4cxx/" target="_blank" rel="noopener noreferrer">http://logging.apache.org/log4cxx/</a>，点击左边的&ldquo;Download&rdquo;进入下载页面，当前（2011年8月9日）的最新版本是0.10.0，你可以下载 .tar.gz 压缩包，解压出来即可。</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">然后就可以直接configure，make，make install了吗？不行，因为log4cxx官方提供的源码安装包不是一个all-in-one的包，它还依赖于Apache的另外两个库：Apache Portable Runtime（APR）和Apache Portable Runtime Utility（APR-Util），你可以在这个链接找到它们：<a href="http://apr.apache.org/" target="_blank" rel="noopener noreferrer">http://apr.apache.org/</a>。</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">（1）安装</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">安装顺序不能变。首先要安装APR，下载到源码安装包后，解压出来，然后：</span></span></span></p>
<pre class="brush:shell;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
./configure --prefix=/usr/local/apr
make
make install
</pre>
<p><span style="font-size: 14px; ">这里把APR安装到了 /usr/local/apr 目录下，注意，千万不要直接./configure，因为那样会把APR的文件安装到若干目录下，非常不利于维护。</span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color: rgb(255, 255, 255); ">文章来源：</span><a href="http://www.codelast.com/" target="_blank" rel="noopener noreferrer"><span style="color: rgb(255, 255, 255); ">http://www.codelast.com/</span></a></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">再安装APR-Util，和上面一样，解压出来源码安装包，然后：</span></span></span></p>
<pre class="brush:shell;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make
make install
</pre>
<p><span style="font-size: 14px; ">这里，通过&nbsp;--with-apr 参数指定了前一步安装的APR的目录，同时也将APR-Util的安装目录设置在了/usr/local/apr-util 目录下。</span></p>
<p style="display: inline !important; font-size: 14px;">
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><font class="Apple-style-span" color="#000000">最后，就是安装log4cxx了，但是在安装之前，还要再注意一点：configure的时候要指定APR和APR-Util的安装路径：</font></span></span></p>
<p></p>
<pre class="brush:shell;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
./configure --prefix=/usr/local/log4cxx --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
mv libtool libtool.bak
ln -s /usr/bin/libtool libtool
make 
make install
</pre>
<p><span style="font-size: 14px; ">注意，中间有两条匪夷所思的命令（mv 和 ln -s），如果不执行的话，会报错（我不太记得是在configure的时候还是make的时候报的错了）：</span></p>
<blockquote>
<p>
		<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/usr/lib/libexpat.so: could not read symbols: File in wrong format</font><br />
		</span></span></span></p>
</blockquote>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;"><font class="Apple-style-span">这些问题的解决办法是从网上搜来的，官方的指南做得不给力啊。</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color: rgb(255, 255, 255); ">文章来源：</span><a href="http://www.codelast.com/" target="_blank" rel="noopener noreferrer"><span style="color: rgb(255, 255, 255); ">http://www.codelast.com/</span></a></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;"><font class="Apple-style-span">这样就把log4cxx安装上了，然后你需要将log4cxx整合进你的程序中，我是把 log4cxx、APR、APR-Util 的三个静态库文件全部放置到我的工程目录下的某个子目录下，然后在Makefile中指定从这个目录下去寻找库文件。三个静态库名如下：liblog4cxx.a，libapr-1.a，libaprutil-1.a。</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;"><font class="Apple-style-span">此外，我还将 log4cxx、APR、APR-Util 的所有头文件（.h）放置到了工程目录下。并在自己的程序中include工程目录下的这些文件。</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;"><font class="Apple-style-span">然后就是在Makefile中添加上与log4cxx相关的一切东西，包括头文件路径，库文件路径等。如果你编译的时候看到与log4cxx相关的&ldquo;undefined reference ...&rdquo;的错误，那么肯定是没有找到相关的库文件或头文件，这里需要提醒你的是要添加的几个库文件参数：-llog4cxx，-lapr-1，-laprutil-1。</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;">你把上面的步骤都做好了，这个时候，你再编译你的程序，可能又会遇到以下错误（好吧，的确有点折磨人）：</span></span></span></p>
<p style="display: inline !important; font-size: 14px;">
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">./lib/log4cxx/libaprutil-1.a(apr_xml.o): In function `apr_xml_parser_geterror&#39;:</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:478: undefined reference to `XML_ErrorString&#39;</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">./lib/log4cxx/libaprutil-1.a(apr_xml.o): In function `do_parse&#39;:</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:418: undefined reference to `XML_Parse&#39;</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:422: undefined reference to `XML_GetErrorCode&#39;</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">./lib/log4cxx/libaprutil-1.a(apr_xml.o): In function `cleanup_parser&#39;:</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:344: undefined reference to `XML_ParserFree&#39;</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">./lib/log4cxx/libaprutil-1.a(apr_xml.o): In function `apr_xml_parser_create&#39;:</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:381: undefined reference to `XML_ParserCreate&#39;</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:390: undefined reference to `XML_SetUserData&#39;</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:391: undefined reference to `XML_SetElementHandler&#39;</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:392: undefined reference to `XML_SetCharacterDataHandler&#39;</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">/home/log4cxx/apr-util-1.3.12/xml/apr_xml.c:404: undefined reference to `XML_SetDefaultHandler&#39;</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">collect2: ld returned 1 exit status</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#00f;"><font class="Apple-style-span">make: *** [cpsAPI] Error 1</font><br />
	</span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color: rgb(255, 255, 255); ">文章来源：</span><a href="http://www.codelast.com/" target="_blank" rel="noopener noreferrer"><span style="color: rgb(255, 255, 255); ">http://www.codelast.com/</span></a></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;"><font class="Apple-style-span">这些乱七八糟的东西是怎么回事？据网上的一些文章说，这是 libaprutil 的一个bug，它不会自动链接到它的依赖项，从而导致了那些错误。要解决这个问题，你在编译的时候添加 <span style="color:#f00;">-lexpat</span> 参数即可&mdash;&mdash;无论你是在Makefile中，还是在命令行直接用g++命令编译程序，都必须要带上这个参数，否则就会得到上面的那一堆错误（真让人恼火啊）。</font></span></span></span></p>
<p>
	<span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;"><font class="Apple-style-span">这样，总算全部搞定了，程序可以编译通过了，下面，就是如何使用log4cxx来写日志的问题了，简单地说一下。在你需要写日志的类的文件中（例如MyClass.cpp），include两个log4cxx头文件：<span style="color:#00f;">log4cxx.h</span>和<span style="color:#00f;">propertyconfigurator.h</span>，然后在类的外部添加：</font></span></span></span></p>
<pre class="brush:cpp;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
static log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger(&quot;MyClass.cpp&quot;));
</pre>
<p><span style="font-size: 14px; ">然后在需要写日志之前，先加载log4cxx的配置文件（其实也可以不使用配置文件的，这里假设你要使用自定义的配置文件）：</span></p>
<pre class="brush:cpp;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
log4cxx::PropertyConfigurator::configure(&quot;./log4cxx.properties&quot;);
</pre>
<p><span style="font-size: 14px; "><span style="font-size:14px;"><span style="font-family:微软雅黑;"><font class="Apple-style-span">这里指定了log4cxx.properties文件作为log4cxx的配置文件（文件名不一定是要叫log4cxx.properties），</font></span></span> </span></p>
<p style="display: inline !important; ">
	<span style="font-size: 14px; "><span style="font-size:14px;"><font class="Apple-style-span">在这个文件中定义了各种参数，例如日志文件会写到哪里去，日志的格式等等。具体的格式可以很复杂、功能很强大，这里无法给出一个详细的说明，后面会给出一个简单的文件示例。</font></span></span></p>
<p>
	<span style="font-size: 14px; "><span style="font-size:14px;"><span style="font-family:微软雅黑;"><span style="color:#000;"><font class="Apple-style-span">然后就可以写日志了，例如：</font></span></span></span></span></p>
<p></p>
<pre class="brush:cpp;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
LOG4CXX_INFO(logger, &quot;Test info message.&quot;);
LOG4CXX_ERROR(logger, &quot;Test error message.&quot;);
</pre>
<p><span style="font-size: 14px; color: rgb(255, 255, 255); ">文章来源：</span><a href="http://www.codelast.com/" style="font-size: 14px; " target="_blank" rel="noopener noreferrer"><span style="color: rgb(255, 255, 255); ">http://www.codelast.com/</span></a></p>
<p style="display: inline !important; ">
	<span style="font-size: 14px; "><span style="font-size:14px;"><span style="font-family:微软雅黑;"><font class="Apple-style-span">运行程序，看看日志是否写进去了？写进去的话就说明成功了。</font></span></span></span></p>
<p style="display: inline !important; ">
	<span style="font-size: 14px; "><span style="font-size:14px;"><span style="font-family:微软雅黑;"><font class="Apple-style-span">上面所说的log4cxx.properties文件，给一个例子如下：</font></span></span></span></p>
<p></p>
<pre class="brush:plain;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;">
log4j.rootLogger=debug, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller&#39;s file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p (%F:%L) %c - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=./app.log
log4j.appender.R.MaxFileSize=200KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p (%F:%L) %c - %m%n
</pre>
<p><span style="font-size: 14px; ">更多log4cxx的详细用法，可以参考log4cxx的一些官方例子：</span><a href="http://logging.apache.org/log4cxx/index.html" style="font-size: 14px; " target="_blank" rel="noopener noreferrer">http://logging.apache.org/log4cxx/index.html</a><br />
<span style="font-size: 14px; color: rgb(255, 255, 255); ">文章来源：</span><a href="http://www.codelast.com/" style="font-size: 14px; " target="_blank" rel="noopener noreferrer"><span style="color: rgb(255, 255, 255); ">http://www.codelast.com/</span></a><br />
<span style="font-size: 14px; ">附：【使用log4cxx遇到的一些问题记录】<br />
（1）<span style="color:#0000ff;">IO Exception : status code =28</span><br />
这个错误可能是由于磁盘空间满了造成的，log4cxx无法将日志写入磁盘上，请看<a href="http://www.mail-archive.com/log4cxx-user@logging.apache.org/msg02811.html" target="_blank" rel="noopener noreferrer">这个链接</a>。</span></p>
<p><span style="color: rgb(255, 255, 255);">文章来源：</span><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">https://www.codelast.com/</span></a><br />
<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;版权声明&nbsp;<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;<br />
转载需注明出处：<u><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><em><span style="color: rgb(0, 0, 255);"><strong style="font-size: 16px;"><span style="font-family: arial, helvetica, sans-serif;">codelast.com</span></strong></span></em></a></u>&nbsp;<br />
感谢关注我的微信公众号（微信扫一扫）：</p>
<p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px; color: rgb(77, 77, 77);">
	<img decoding="async" alt="wechat qrcode of codelast" src="https://www.codelast.com/codelast_wechat_qr_code.jpg" style="width: 200px; height: 200px;" /></p>

			<!--[syntaxhighlighter]-->
			<!--代码高亮，请勿编辑-->
			<script type="text/javascript" src="https://www.codelast.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shCore.js"></script><script type="text/javascript" src="https://www.codelast.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shBrushShell.js"></script>
<script type="text/javascript" src="https://www.codelast.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shBrushCpp.js"></script>
<script type="text/javascript" src="https://www.codelast.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shBrushPlain.js"></script>

			<link type="text/css" rel="stylesheet" href="https://www.codelast.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/styles/shCoreCk.css" />
			<link type="text/css" rel="stylesheet" href="https://www.codelast.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/styles/shThemeCk.css" />
			<script type="text/javascript">
			SyntaxHighlighter.defaults['class-name']	= '';
			SyntaxHighlighter.defaults['smart-tabs']	= true;
			SyntaxHighlighter.defaults['tab-size']		= 2;
			SyntaxHighlighter.defaults['gutter']		= true;
			SyntaxHighlighter.defaults['quick-code']	= true;
			SyntaxHighlighter.defaults['collapse'] 		= false;
			SyntaxHighlighter.defaults['auto-links']	= true;
			SyntaxHighlighter.defaults['toolbar']		= true;
			SyntaxHighlighter.all();
			</script>
			<!--[/syntaxhighlighter]-->]]></content:encoded>
					
					<wfw:commentRss>https://www.codelast.com/%e5%8e%9f%e5%88%9b-log4cxx%e5%9c%a8linux%e4%b8%8b%e7%9a%84%e5%ae%89%e8%a3%85%e3%80%81%e4%bd%bf%e7%94%a8/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
