根据Session区分的日志系统.

[b]前一阵,被经理安排了个任务,,就是在现有项目中加入日志,但是要根据Session的值来区分日志文件.用LOG4J实现不了..哎 怒了...自己重写了一个....

具体需求:
1,按这个分公司编号创建文件夹
2,按部门号+日期创建LOG文件
3,当日志文件大于指定SIZE时拷贝文件 [/b]

[b]各位多提一提意见,,, 本人技术有限, 有些地方的可能存在错误,我想不到的! 请各位指正啊!![/b]


[b]Log.java[/b]
package org.dhcc.fm.log;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpSession;
/**
* 日志类
* @author lishengxi
*
*/
public class Log {
private LogFile tf = null;
public Log(HttpSession session){
tf = new LogFile(session);
}
public String logForMat(){
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日-HH点mm分ss秒");
String newDate = format.format(new Date());
return newDate+",发生错误:";
}
public void error(String mss){
try {
tf.write(logForMat()+mss);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void error(String mss,Exception et){
try {
tf.write(logForMat()+mss,et);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}

[b]LogFactory.java[/b]

package org.dhcc.fm.log;

import javax.servlet.http.HttpSession;
/**
* 日志工厂类
* @author lishengxi
*
*/
public class LogFactory {
public static Log createLog(HttpSession session){
Log log = new Log(session);
return log;
}
}


[b]LogFile.java[/b]
package org.dhcc.fm.log;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpSession;
/**
* 日志文件操作类
* @author lishengxi
*/
public class LogFile {
private static String logpath = LogProperties.LOG_FM_FILE_PATH;
private static String fileH = LogProperties.LOG_FM_FILE_TYPE;
private static long length = LogProperties.LOG_FM_FILE_SIZE;
private static String department = LogProperties.LOG_FM_SESSION_DEPARTMENT;
private static String upbrno = LogProperties.LOG_FM_SESSION_UPBRNO;
private static String encoding = LogProperties.LOG_FM_FILE_ENCODING;
private String _fileName;
private String up_br_no;
private long count;
public String getUp_br_no() {
return up_br_no;
}
public void setUp_br_no(String upBrNo) {
up_br_no = upBrNo;
}
public LogFile(HttpSession session){
String temp = session.getAttribute(department).toString();
if(temp!=null&&!temp.equals("")){
_fileName = temp;
up_br_no = session.getAttribute(upbrno).toString();
}
newFolder();
newFile();
}
public void newFolder(){
try
{
String filePath = logpath+"\\"+getUp_br_no();
filePath = filePath.toString();
File myFilePath = new File(filePath);
if(!myFilePath.exists()){
myFilePath.mkdir();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void newFile(){
try{
String filePath = logpath+"\\"+getUp_br_no()+"\\"+getLogFile(_fileName)+fileH;
File myFilePath = new File(filePath);
if (!myFilePath.exists()){

myFilePath.createNewFile();
}
}
catch (Exception e){
e.printStackTrace();
}
}
public void rollOver() {
File myFilePath = new File(logpath+"\\"+getUp_br_no()+"\\"+getLogFile(_fileName)+fileH);
File target = new File(logpath+"\\"+getUp_br_no()+"\\"+getTLogFile(_fileName)+fileH);
if(myFilePath.length()>length){
myFilePath.renameTo(target);
}
}
public void write(String str,Exception e) throws Exception{
this.rollOver();
File myFilePath = new File(logpath+"\\"+getUp_br_no()+"\\"+getLogFile(_fileName)+fileH);
FileOutputStream fos = new FileOutputStream(myFilePath,true);
OutputStreamWriter osw = new OutputStreamWriter(fos,encoding);
PrintWriter myFile = new PrintWriter(osw);
myFile.println(str);
e.printStackTrace(myFile);
myFile.close();
osw.close();
fos.close();
}
public void write(String str) throws Exception{
this.rollOver();
File myFilePath = new File(logpath+"\\"+getUp_br_no()+"\\"+getLogFile(_fileName)+fileH);
FileOutputStream fos = new FileOutputStream(myFilePath,true);
OutputStreamWriter osw = new OutputStreamWriter(fos,encoding);
PrintWriter myFile = new PrintWriter(osw);
myFile.println(str);
myFile.close();
osw.close();
fos.close();
}
private String getLogFile(String fileName){
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
return fileName+"_"+format.format(new Date());
}
private String getTLogFile(String fileName){
SimpleDateFormat format = new SimpleDateFormat("HH点mm分ss秒");
return getLogFile(fileName)+"_"+format.format(new Date());
}
}

[b]LogProperties.java[/b]
package org.dhcc.fm.log;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 日志属性类
* @author lishengxi
*
*/
public class LogProperties {
private static final String LOGFILE = "LOG.properties"; //默认日志配置文件
public static String LOG_FM_FILE_PATH = "";//日志保存路径
public static String LOG_FM_FILE_TYPE = "";//日志文件类型
public static String LOG_FM_FILE_ENCODING = "";//日志文件编码
public static long LOG_FM_FILE_SIZE = 0;//日志文件大小
public static String LOG_FM_SESSION_DEPARTMENT = "";//部门
public static String LOG_FM_SESSION_UPBRNO = "";//机构

static{
//获取ClassPath下的日志配置文件
InputStream is1 = Thread.currentThread().getContextClassLoader().getResourceAsStream(LOGFILE);
Properties p = new Properties();
try {
p.load(is1);
LOG_FM_FILE_PATH = p.getProperty("log.fm.file.path");
LOG_FM_FILE_TYPE = p.getProperty("log.fm.file.type");
LOG_FM_FILE_SIZE = LogUtil.toFileSize(p.getProperty("log.fm.file.size"),1024);
LOG_FM_FILE_ENCODING = p.getProperty("log.fm.file.type.encoding");
LOG_FM_SESSION_DEPARTMENT = p.getProperty("log.fm.session.department");
LOG_FM_SESSION_UPBRNO = p.getProperty("log.fm.session.upbrno");


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

[b]LogUtil.java[/b]
package org.dhcc.fm.log;

/**
* 日志工具类
* @author lishengxi
*
*/
public class LogUtil {
/**
* 转换文件大小 2MB = 1024*1024*2
* @param value
* @param dEfault
* @return
*/
public static long toFileSize(String value, long dEfault) {
if(value == null)
return dEfault;
String s = value.trim().toUpperCase();
long multiplier = 1;
int index;
if((index = s.indexOf("KB")) != -1) {
multiplier = 1024;
s = s.substring(0, index);
}
else if((index = s.indexOf("MB")) != -1) {
multiplier = 1024*1024;
s = s.substring(0, index);
}
else if((index = s.indexOf("GB")) != -1) {
multiplier = 1024*1024*1024;
s = s.substring(0, index);
}
if(s != null) {
try {
return Long.valueOf(s).longValue() * multiplier;
}
catch (NumberFormatException e) {
e.printStackTrace();
}
}
return dEfault;
}
}


[b]测试一下啊...!!!!!!!![/b]
package org.dhcc.fm.log;

import java.util.Enumeration;
import java.util.HashMap;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionContext;
import org.dhcc.fm.log.*;

public class Test extends Thread {

private String TName = "";
public Test(String N){
TName = N;
}
@Override
public void run() {
// TODO Auto-generated method stub

HttpSession session = new HttpSession() {
HashMap sessionSop = new HashMap();
public void setMaxInactiveInterval(int arg0) {
// TODO Auto-generated method stub

}

public void setAttribute(String arg0, Object arg1) {
// TODO Auto-generated method stub
sessionSop.put(arg0, arg1);
}

public void removeValue(String arg0) {
// TODO Auto-generated method stub

}

public void removeAttribute(String arg0) {
// TODO Auto-generated method stub

}

public void putValue(String arg0, Object arg1) {
// TODO Auto-generated method stub

}

public boolean isNew() {
// TODO Auto-generated method stub
return false;
}

public void invalidate() {
// TODO Auto-generated method stub

}

public String[] getValueNames() {
// TODO Auto-generated method stub
return null;
}

public Object getValue(String arg0) {
// TODO Auto-generated method stub
return null;
}

public HttpSessionContext getSessionContext() {
// TODO Auto-generated method stub
return null;
}

public ServletContext getServletContext() {
// TODO Auto-generated method stub
return null;
}

public int getMaxInactiveInterval() {
// TODO Auto-generated method stub
return 0;
}

public long getLastAccessedTime() {
// TODO Auto-generated method stub
return 0;
}

public String getId() {
// TODO Auto-generated method stub
return null;
}

public long getCreationTime() {
// TODO Auto-generated method stub
return 0;
}

public Enumeration getAttributeNames() {
// TODO Auto-generated method stub
return null;
}

public Object getAttribute(String arg0) {
// TODO Auto-generated method stub
return sessionSop.get(arg0);
}
};
session.setAttribute("department_name", "三星企划事业部");
session.setAttribute("up_br_no", "010002");
Log log = LogFactory.createLog(session);
for(int i = 0 ; i < 10000 ; i ++){
try {
thorwsOut();
} catch (Exception e) {
// TODO Auto-generated catch block
log.error("数据库连接错误!",e);
e.printStackTrace();
}

}
}
public void thorwsOut() throws Exception{
throw new Exception("数据连接格式不正确!..");
}
public static void main(String agrs[]){
new Test("线程1").start();
System.out.println("1--------");
new Test("线程2").start();
System.out.println("2--------");
new Test("线程3").start();
System.out.println("3--------");
}

}

[b]忘了,要加入LOG.properties[/b]
log.fm.file.path = c:\\fm_log\\
log.fm.file.type = .log
log.fm.file.size = 1MB
log.fm.file.type.encoding = UTF-8
log.fm.session.department = department_name
log.fm.session.upbrno = up_br_no

[b]效果就是[/b]
[img]http://dl.iteye.com/upload/picture/pic/65427/51d981f3-d016-3fa2-8d7f-69db862177b3.bmp[/img]
[b]完!!!![/b]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值