【发布时间】:2015-05-13 13:14:32
【问题描述】:
我有问题; security 要求我有 java swing 应用程序,该应用程序具有使用 log4j 生成的日志文件,以便在跟踪时出现支持问题 一个错误。
我必须 ecrypt/cypher/secure 文件,以便客户端无法打开它们并查看它们(至少不是人类可读的方式),同时支持技术团队获取这些文件他们会知道如何阅读(解密)它们。
我做了很多搜索,并尝试了我发现的最佳选择,即通过扩展 SkeletonAppender 来构建自定义附加程序。
现在知道我的 log4j 工作正常继续加密部分。
任何帮助,链接都很好。
工作...版本
<appender name="cache" class="com.MyAppender">
<param name="Threshold" value="ALL" />
<param name="ImmediateFlush" value="true" />
<param name="File" value="${home}/logs/cache.log"/>
<param name="Append" value="true"/>
<param name="Threshold" value="ALL" />
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern" value="%-5p %d{MMM-dd-yyyy HH:mm:ss,SSS} %c{1} - %m%n" />
</layout>
</appender>
不工作...版本
<appender name="cache" class="com.MyAppender">
<param name="Threshold" value="ALL" />
<param name="ImmediateFlush" value="true" />
<param name="File" value="${home}/logs/cache.log"/>
<param name="Append" value="true"/>
<param name="Threshold" value="ALL" />
<param name="Encoding" value="UTF-8" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern"
value="${home}/logs/cache.%d{yyyy-MM-dd-HH}.gz" />
<param name="ActiveFileName" value="${home}/logs/cache.log" />
</rollingPolicy>
<layout class="org.apache.log4j.EnhancedPatternLayout">
<param name="ConversionPattern"
value="%-5p %d{MMM-dd-yyyy HH:mm:ss,SSS} %c{1} - %m%n" />
</layout>
</appender>
简单的类测试
package com.MyAppender;
import org.apache.log4j.spi.LoggingEvent;
public class MyAppender extends org.apache.log4j.RollingFileAppender {
private String file;
private boolean initialized = false;
private String baseFileName = null;
// private static final Log log = LogFactory.getLog(MyAppender.class);
/**
*
* write to ActivityLog
*
* @param event
* logging event invoked.
*
*/
@Override
protected void subAppend(LoggingEvent event) {
if (!initialized) {
createNewFile();
}
synchronized (this) {
super.subAppend(event);
}
}
/**
*
* create a new ActivityLog File
*
*/
public void createNewFile() {
try {
baseFileName = file;
super.setFile(baseFileName);
super.activateOptions();
initialized = true;
} catch (Exception e) {
// log.error("*#*Error in configuration of log4j params,unable to create ActivityLog file");
}
}
/**
*
* invokes File Appender's activateOptions() which controls the creation of
* log files.
*
*/
@Override
public void activateOptions() {
super.setFile(file);
super.activateOptions();
}
/**
*
* Close and rename the current ActivityLog file and reset counter and
* timestamp.
*
*/
public void rollOver() {
closeFile();
initialized = false;
}
@Override
public void setFile(String file) {
this.file = file;
}
}
然后我计划在 Cipher OutputStream
【问题讨论】:
-
我使用了javaworld.com/article/2075817/core-java/… 中的代码并且它可以工作,但是在log4j.xml 中没有
rollingPolicy标签如何包含它*我将更新我的代码* -
与其乱用 appender,不如考虑对写入日志的数据进行加密,而不是对日志本身进行加密。换句话说,对日志中的所有内容进行加密至关重要,或者是否可以只加密敏感数据而将非敏感数据(例如时间戳等)保留为纯文本?
-
谢谢@Bohemian 好主意,但看看stackoverflow.com/questions/629755/… 它有安全漏洞你还有其他好主意吗
-
我忘了说它的 SWING appliaciotn
-
我认为你应该实现一个
Encoder,用你的CypherOutputStream装饰OutputStream:logback.qos.ch/manual/encoders.html
标签: java encryption log4j