关于java日志,下面以Log4j为例子说明(供参考)。
1、导包(Log4j所依赖的jar包)
2、配置属性文件。如下:
3、遍写调用日志方法的接口
public interface LoggerUtil {
// 得到Logger,用于打印日志
Logger logger = Logger.getLogger(LoggerUtil.class)
}
4、使用Log4j
//删除数据@RequestMapping("/delete.do")
public String delete(Students students) {
try {
stuService.delete(students)
} catch (Exception e) {
// 直接使用
LoggerUtil.logger.error(e.getMessage())
}
return "redirect:selectAll.do"
}
代码如下,自己测试哦import java.awt.event.ActionListener
import javax.swing.*
import java.awt.*
import java.awt.Color
import java.awt.event.ActionEvent
import javax.swing.tree.*
import javax.swing.event.*
import java.io.*
import java.util.*
import javax.swing.JColorChooser
class Diary extends JFrame implements ActionListener,TreeSelectionListener{
JMenuBar menubar
JMenu menu1,menu2,menu3,menu4,menu5,menu6
JMenuItem item1,item2,item3,item4,item5,item6,item7,item8,item52,item61,item62,item63,item64
JTextArea text=new JTextArea(20,40)
JButton b_save=new JButton("保存日志")
JButton b_del=new JButton("删除日志")
JButton b3=new JButton("锁定日志")
JButton b4=new JButton("解除锁定")
JSplitPane split1,split2
JScrollPane scroll1,scroll2
JPanel p
JTree tree=null
int i=0
DefaultMutableTreeNode root
DefaultMutableTreeNode month[]=new DefaultMutableTreeNode[13]
Diary(){
final JFrame frame = this
menubar=new JMenuBar()
menu4=new JMenu("登陆")
item6=new JMenuItem("密码登陆")
menu4.add(item6)
menubar.add(menu4)
menu1=new JMenu("文件")
item1=new JMenuItem("新建")
item2=new JMenuItem("退出")
menu1.add(item1)
menu1.add(item2)
menubar.add(menu1)
menu2=new JMenu("编辑")
item3=new JMenuItem("复制")
item4=new JMenuItem("剪切")
item5=new JMenuItem("粘贴")
item52=new JMenuItem("全选")
menu2.add(item3)
menu2.add(item4)
menu2.add(item5)
menu2.add(item52)
menubar.add(menu2)
menu3=new JMenu("设置")
//item6=new JMenuItem("密码设置")
item63=new JMenuItem("设置字体颜色")
item64=new JMenuItem("设置背景颜色")
item61=new JMenuItem("锁定编辑区")
item62=new JMenuItem("解除锁定")
//menu3.add(item6)
menu3.add(item63)
menu3.add(item64)
menu3.add(item61)
menu3.add(item62)
menubar.add(menu3)
menu4=new JMenu("查看")
item7=new JMenuItem("状态栏")
menu4.add(item7)
menubar.add(menu4)
menu5=new JMenu("帮助")
item8=new JMenuItem("我的日记本信息")
menu5.add(item8)
menubar.add(menu5)
setJMenuBar(menubar)//把菜单条添加到窗口顶端
Container con=getContentPane() //调用getContentPane()方法获的内容面板
root=new DefaultMutableTreeNode("日历记事本")//结合树的输入与输出建立一个日历记事本
for(i=1i<=12i++)
{
month[i]=new DefaultMutableTreeNode(""+i+"月")
root.add(month[i])
}
for(i=1i<=12i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
{
for(int j=1j<=31j++)
month[i].add(new DefaultMutableTreeNode(j+"日"))
}
else if(i==4||i==6||i==9||i==11)
{
for(int j=1j<=30j++)
month[i].add(new DefaultMutableTreeNode(j+"日"))
}
else
{
for(int j=1j<=28j++)
month[i].add(new DefaultMutableTreeNode(j+"日"))
}
}
tree=new JTree(root)
p=new JPanel() //使用JPanel创建一个面板
p.add(b_save)p.add(b_del)p.add(b3)p.add(b4) //把这4个按钮组件假如面板中
scroll1=new JScrollPane(text,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED)//把文本框放入滚动窗格中
b_save.addActionListener((ActionListener) this) //按钮的监听器
b_del.addActionListener((ActionListener) this)
scroll2=new JScrollPane(tree)
split1=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,p,scroll1) //水平拆分这4个按钮和文本区
split2=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scroll2,split1) //竖直拆分树行日历和文本按钮区
item1.addActionListener((ActionListener) this) //菜单栏的监听器
item2.addActionListener((ActionListener) this)
item3.addActionListener((ActionListener) this)
item4.addActionListener((ActionListener) this)
item5.addActionListener((ActionListener) this)
item6.addActionListener((ActionListener) this)
item7.addActionListener((ActionListener) this)
item8.addActionListener((ActionListener) this)
item52.addActionListener((ActionListener) this)
item61.addActionListener((ActionListener) this)
item62.addActionListener((ActionListener) this)
item63.addActionListener((ActionListener) this)
tree.addTreeSelectionListener((TreeSelectionListener) this) //树形日历的监听器
con.setLayout(new FlowLayout()) //设置布局
setSize(600,500) //设置窗体的大小
Dimension screen=Toolkit.getDefaultToolkit().getScreenSize()
setLocation((screen.width-300)/2,(screen.height-220)/2)
setResizable(false) //设置窗口不可以调节大小
setVisible(true)//设置窗口为可视
con.add(split2) //把树形日历和按钮,文本区都加入到内容面板中
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) //单击关闭图标后关闭窗口
}
public void valueChanged(TreeSelectionEvent e) //处理树形事件的接口
{
text.setText(null)
if(e.getSource()==tree)
{
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent()
if(node.isLeaf())
{
String str=node.toString()
for( i=0i<=12i++)
{
if(node.getParent()==month[i])
{
try{String temp=null
File f=new File(node.getParent().toString()+str+".text")
FileReader file=new FileReader(f)
BufferedReader in=new BufferedReader(file)
while((temp=in.readLine())!=null)
text.append(temp+'\n')
file.close()
in.close()
}
catch(Exception el){}
}
}
}
}
}
//}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b_save) //保存按钮的实现方法
{
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent()
String str=node.toString()
if(node.isLeaf())
{
try{
File f=new File(node.getParent().toString()+str+".text")
FileWriter tofile=new FileWriter(f)
BufferedWriter out=new BufferedWriter(tofile)
out.write(text.getText(),0,(text.getText()).length())
out.flush()
tofile.close()out.close()
}
catch(Exception el){}
}
}
else if(e.getSource()==b_del)
{
int n=JOptionPane.showConfirmDialog(this, "该文件还没有保存,确定要删除吗?","确认对话框", JOptionPane.YES_NO_OPTION)
if(n==JOptionPane.YES_OPTION)
{
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent()
String str=node.toString()
if(node.isLeaf())
{
File f=new File(node.getParent().toString()+str+".text")
f.delete()
}
}
else if(n==JOptionPane.NO_OPTION)
{
System.exit(0)
}
}
else if(e.getSource()==b3)
{
text.setEditable(false)
}
else if(e.getSource()==b4)
{
text.setEditable(true)
}
String selected=e.getActionCommand()//获取命令
if(selected.equals("退出")){ //执行"退出"命令
dispose()
}
else if(selected.equals("新建")){
text.setText("")
}
else if(selected.equals("复制"))
{
text.copy()
}
else if(selected.equals("剪切"))
{
text.cut()
}
else if(selected. equals("粘贴"))
{
text.paste()
}
else if(selected.equals("全选"))
{
text.selectAll()
}
else if(selected.equals("密码登陆"))
{
LoginWindow login=new LoginWindow()
}
else if(selected.equals("设置字体颜色")){
Color newColor=JColorChooser.showDialog(this, "选择字体颜色", text.getForeground())
if(newColor !=null)
{
text.setForeground(newColor)
}
}
else if(selected.equals("设置背景颜色"))
{
Color newColor=JColorChooser.showDialog(this, "选择背景颜色", text.getBackground())
if(newColor !=null)
{
text.setBackground(newColor)
}
}
else if(selected.equals("锁定编辑区"))
{
text.setEditable(false)
}
else if(selected.equals("解除锁定"))
{
text.setEditable(true)
}
}
}
class LoginWindow extends JFrame implements ActionListener {
JPanel p1=new JPanel() //定义并建立面板
JPanel p2=new JPanel()
JPanel p3=new JPanel()
JPanel p4=new JPanel()
JPanel p5=new JPanel()
JTextField text1=new JTextField(15)//用户名文本框
JPasswordField text2=new JPasswordField(15)//密码域
JButton ok=new JButton("确定")
JButton cancel=new JButton("取消")
LoginWindow()
{
setBackground(Color.DARK_GRAY) //设置背景颜色
Container con=getContentPane() //取出内容面板
con.setLayout(new GridLayout(5,1)) //设置布局为5行1列
p2.add(new JLabel("用户名:"))p2.add(text1) //将组件添加到中间容器
p3.add(new JLabel("密码"))p3.add(text2)
p4.add(ok)p4.add(cancel)
ok.addActionListener(this) //注册事件监听器
cancel.addActionListener(this)
text1.addActionListener(this)
text2.addActionListener(this)
con.add(p1)con.add(p2)con.add(p3)con.add(p4)con.add(p5)//将面板添加到内容面板
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) //单击关闭图标后关闭窗口
setSize(300,220) //设置窗口的大小
Dimension screen=Toolkit.getDefaultToolkit().getScreenSize()
setLocation((screen.width-300)/2,(screen.height-220)/2)
setTitle("登录窗口")
setResizable(false) // 不让用户改变窗口大小
setVisible(true)
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==ok||e.getSource()==text2){
if(text1.getText().trim().equals("meijianwen") &&text2.getText().trim().equals("070341320")){
dispose() //关闭登陆窗口
}
else{
JOptionPane.showMessageDialog(null, "用户名或密码错误!")
text1.requestFocus() //设置焦点
text1.setSelectionStart(0) //设置选中文本开始位置
text1.setSelectionEnd(text1.getText().length())
}
}
else if(e.getSource()==cancel){//单击取消按钮
dispose()
//System.exit(0)
}
else if(e.getSource()==text1)//在用户名文本框按回车焦点移到密码域
text2.requestFocus()
}
}
public class MyDiary
{
public static void main(String args[])
{
JFrame.setDefaultLookAndFeelDecorated(true)
Font font=new Font("JFrame",Font.PLAIN,14) //定义字体
Enumeration keys=UIManager.getLookAndFeelDefaults().keys()//枚举风格关键字
while(keys.hasMoreElements())
{
Object key=keys.nextElement()
// if(((String)key).equals("Menu.foreground")||((String)key).equals("MenuItem.foreground"))
// UIManager.put(key,Color.DARK_GRAY) //设置菜单文字颜色
if(UIManager.get(key)instanceof Font)UIManager.put(key,font)
}
Diary win=new Diary()
win.validate()
}
}