当前位置:首页 » 编程软件 » log4j编译

log4j编译

发布时间: 2022-12-07 04:02:10

1. java工程中如何使用log4j输出指定路径日志文件,是java工程,不是web工程,谢谢

此文档放在项目编译文件.class相同的位置
### set log levels ###log4j.rootLogger = debug , stdout , D### 输出到控制台 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n### 输出到日志文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUGlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n### 保存异常信息到单独文件 ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = logs/error.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = ERRORlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
配置获取方法:
PropertyConfigurator.configure( "D:\\Project Files\\myeclipse\\commontest\\bin\\log\\log4j\\log4j.properties" );
Logger log=Logger. getLogger(TestLog4j.class);
log.warn( "嘿嘿");
log.debug( "呜呜");
log.error( "错啦");

2. 把日志从log4j转换成logback的经历

既然log4j1.x出问题了,之前用logback的时候又觉得挺爽了,那么就抓紧换吧,老规矩,方案先行。经过一番调查研究,制定如下战略:

对上面的几个jar解释下:

这个可以通过idea的maven插件的Show Dependencies功能查看有那些包依赖了log4j,然后一一配置exclusion。maven本身没有全局排除的功能,这个确实比较郁闷。另外发现有神人说可以通过在私服上发布一个空的相同groupId+artifactId的jar来替换掉这些依赖,个人感觉还是有点难以接受,感兴趣的同学可以去试试。

步骤同上一步;

具体配置的内容就不贴了,有兴趣的看 官方文档 。这里面关于logger的配置特别说明一下,在网上看到很多示例配置都是错的。

logger的additivity如果设置成false的话(默认是true),那么一定要给logger加上appender,否则符合该规则的日志都不会输出。

使用该插件后,在编译的时候就会检查是否有log4j和common-logging的包被依赖了,如果有则编译会不通过(虽然不能做全局的排除,但是好歹做个全局检查吧 -_-!!!)。
但这里也有个不爽的地方,父子项目是不能继承的,每个项目都需要设置;

3. windows下用命令行编译并运行java工程,怎样编译引用的多个jar包和配置文件.xml呢

javac -classpath c:\lib\log4j.jar;D:\lib\logging.jar src\org\myproject\*.java

还可以指定输出目录,如输出到bin(bin目录要预告建立好)
javac -classpath c:\lib\log4j.jar;D:\lib\logging.jar -d bin src\org\myproject\*.java

至于配置文件,因为要看实际的使用,可以用命令拷贝。如拷贝log4j.properties
/y myConfig\log4j.properties bin

4. log4j 支持环境变量吗

修改 log4j 代码 以支持在 log4j.properties 设置环境变量

http://logging.apache.org/site/binindex.cgi
源码进行浏览后,估计需要修改的文件应该是
src\java\org\apache\log4j\helpers\OptionConverter.java
在这个文件可以看到,log4j 对 ${} 这种形式的变量会进行以下转换
// first try in System properties
String replacement = getSystemProperty(key, null);
// then try props parameter
if(replacement == null && props != null) {
replacement = props.getProperty(key);
}
就是说,会先从系统变量中读取属性值,如果系统变量不存在这个属性,就从log4j配置文件中属性中读取.
问题就在这里了!
并没有从环境变量中读取,因此,增加一个函数:
public
static
String getEnvProperty(String key, String def) {
try {
String value = System.getenv(key);
if (value == null)
value = def;
return value;
} catch(Throwable e) { // MS-Java throws com.ms.security.SecurityExceptionEx
LogLog.debug("Was not allowed to read system property \""+key+"\".");
return def;
}
}
是的,通过调用 System.getenv() ,就可以从环境变量中读取属性值了.
再修改刚才的代码

// first try in System properties
String replacement = getSystemProperty(key, null);
// then try in environment properties
if (replacement == null)
{
replacement = getEnvProperty(key, null);
}
// then try props parameter
if(replacement == null && props != null) {
replacement = props.getProperty(key);
}
ok, 代码修改工作完毕, 现在需要编译了.(当然,你需要先安装 ant 和 java. 以后我贴相应的安装文档出来.)
在 logging-log4j-1.2.11 目录下输入
ant
会提示要加参数,所以改为输入
ant build
编译通过,但发现有其它问题,不过不要紧了,已经有这个文件就可以了
logging-log4j-1.2.11\dist\classes\org\apache\log4j\helpers\OptionConverter.class
要正常生成 jar 文件,可能需要其它库文件支持,但不是我研究的方向了.
我只要把这个 OptionConverter.class 放到 log4j-1.2.11.jar 文件里, 替换掉旧的 OptionConverter.class 就可以了.
howto? easy job. 用 winrar 打开 log4j-1.2.11.jar, 用新的 OptionConverter.class 覆盖掉旧的, done!
最后一步, 把这个新的log4j-1.2.11.jar 布署到你的系统中,就可以了.
或者改一个名字? log4j-1.2.11-pro.jar ? 增强版~ 咔咔, well done!

热点内容
编译历史 发布:2025-07-04 18:23:01 浏览:851
空调压缩机种类 发布:2025-07-04 18:13:58 浏览:242
中国有ip6服务器吗 发布:2025-07-04 17:58:56 浏览:725
第六章编译原理答案 发布:2025-07-04 17:37:55 浏览:40
php内存优化 发布:2025-07-04 17:25:54 浏览:664
威纶触摸屏如何设置时间限制密码 发布:2025-07-04 17:25:50 浏览:418
python列表的遍历 发布:2025-07-04 17:24:20 浏览:24
编译基本块 发布:2025-07-04 17:23:06 浏览:750
scl语言编程 发布:2025-07-04 17:23:05 浏览:993
oracle用户连接数据库连接 发布:2025-07-04 17:20:20 浏览:939