log4j日志及添加修改ztree
1 log4j日志
1.1 导入log4j.jar包
1.2 编写配置文件
日志一般分5个等级,从低到高分别是DEBUG INFO WARN ERROR FATAL。对应中文的意思就是 调试信息 一般信息 警告信息 错误信息 严重错误信息
了解清楚等级划分之后,再来控制生成环境和开发环境输出的信息不同就很简单了,我可以配置一个最低的日志输出级别,在开发环境我设置为DEBUG,也就是所有的日志信息都能输出。在生产环境我可以设置为WARN,也就是只有WARN及以上级别的日志才会被输出,这样是不是就可以在不同的环境控制不同的日志输出了。
log4j的配置
基本的配置文件
### Console ###
log4j.appender.AA=org.apache.log4j.ConsoleAppender
log4j.appender.AA.Target=System.out
log4j.appender.AA.layout=org.apache.log4j.PatternLayout
log4j.appender.AA.layout.ConversionPattern=%p [%C{1}:%L] %m%n
### File ###
log4j.appender.D=org.apache.log4j.FileAppender
log4j.appender.D.File=E://logs/log.log
log4j.appender.D.Append=true
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### root level ###
log4j.rootLogger=debug,AA
### spring level ###
log4j.logger.org.springframework=WARN
### your package level ###
log4j.logger.com.senchen=WARN
### your sub package level ###
log4j.logger.com.senchen.shop=debug
注意,这里有一个日志的格式,也就是 ConversionPattern,那么这个值到底该如何配置呢?
%n - 换行
%m - 日志内容
%p - 日志级别(FATAL, ERROR, WARN, INFO, DEBUG or custom)
%r - 程序启动到现在的毫秒数
%% - percent sign in output
%t - 当前线程名
%d - 日期和时间,常用的格式有 %d{DATE}, %d{ABSOLUTE}, %d{HH:mm:ss,SSS}, %d{ddMMyyyy HH:mm:ss,SSS}
%l - 同 %F%L%C%M
%F - java源文件名
%L - java源码行数
%C - java类名,%C{1} 输出最后一个元素
%M - java方法名
%n - 换行
Java代码[%d{HH\:mm\:ss\:SSS}][%p] (%c\:%L) - %m%n[%d{HH\:mm\:ss\:SSS}][%p] (%c\:%L) - %m%n输出格式为:[08:58:59:412][INFO] (com.soon.action:35) - 服务器启动
1.3 类中使用
2 添加分类通过ztree
2.1预添加思路:
点击添加分类后,页面要跳转到添加页面那么上级分类是?
这时需要在url上加上当前id的参数,用来回显并把它作为上级id去添加分类
如果没有id就是添加的一级分类,转发到添加页面,这里需要做一个判断
如果id查到的分类为null就显示顶级分类,否则要显示上级分类
并把这个id存到隐藏域中作为添加分类的upid
-
s到这里预添加就结束了
2.2 需要id那么之前的list方法就需要在存一个id
@RequestMapping("/list")
public String list(@RequestParam(defaultValue="0") int id,Model md){
System.out.println(this.getClass()+"日志1...根据上级获取下级");
List list = null;
if( id ==0){
list = ksvs.getFirstTypes();
}else{
list = ksvs.getSubTypes( id );
}
md.addAttribute("upid",id);
md.addAttribute("typeList", list);
return "/kind/kind_list";
}//tree
2.3 url请求加上要添加的分类的upid
onclick="location.href='<%=path%>/ctrl/pingtai/kindTree/befAdd.do?id=${upid}'"
2.4 Controller层把查到的分类对象存到request域中
@RequestMapping("/befAdd")
public String preSave(@RequestParam(defaultValue="0") int id,Model md){
log.debug("日志1...接收到的上级id:"+id);
Kind father = ksvs.findById(id);
log.debug("日志2...上级id获取到的对象:"+father);
md.addAttribute("upType",father);
return "/kind/kind_add";
}
2.5 添加分类到数据库思路
首先表单里有文件类型所以要加上
enctype="multipart/form-data"
跳转的地址为
action="<%=path%>/ctrl/pingtai/kindTree/add.do"
-
这里注意对springMVC.xml要加上上传解析器
响应的方法要把分类对象存入到数据库中
对应的图片存到指定的目录下
重定向到list.do方法并传递这个分类对象的upid过去,以显示该upid下的所有分类列表
2.6 Controller中的添加方法
@RequestMapping("/add")
public String save(Kind k,@RequestParam(name="simg",required=false) MultipartFile file,HttpServletRequest req) throws Exception, IOException{
log.debug("\n日志1...接收到分类名称 : " + k.getKindName()+"\t描述"+k.getKindDesc()+"\t"+k.getUpid()+"\t"+ file);
if(null!=file&& !file.isEmpty()){
String directory = req.getSession().getServletContext().getRealPath("")+WebUtils.def_kindImgPath;
String fileName = directory+file.getOriginalFilename();
log.debug("日志2...保存分类图片1 : " + fileName);
file.transferTo( new File(fileName ));
k.setKindImg(file.getOriginalFilename());
}
ksvs.save(k);
return "redirect:/ctrl/pingtai/kindTree/list.do?id="+k.getUpid();
}
2.7 业务层判断有没有upid
根据这个来调用不同的方法
/**
* 保存 分类对象
* @param k
*/
public void save(Kind k)throws RuntimeException{
log.debug("\t日志1..保存 " +(k.getUpid()==0?"顶级":"下级") );
if( k.getUpid() == 0){
kmng.save(k);
}else{
secMng.saveSecond(k);
}
}
2.8 接下来就是从数据库中去添加数据了
添加方法到此就结束了