简单的C#日志记录和弹出提示
记录这个博客的想法只有两点,
一,在使用webserver的时候如果你不好调用本地server端,那么你可以启用日志来查看异常。当然也可以调用本地的server端。这里简单说一下。不是本文的重点。
发布好本地webserver后,以管理员模式启动VS,在VS里面如图
二、在页面使用扫描枪的时候,总是弹出提示就会影响效率。所以不用弹出。我们提示在页面里面。


附件好之后启动调试吧。好了,下来我们说说今天的记录。
先上效果图。


效果是异常异常bug已经记录在日志,弹出提示显示在页面。顺便加了一个方法,给字段加双引号
好了,开始我的操作。来来来,我们开始骚操作起来。
先建一个操作类
using System;
using System.IO;
namespace FrmLogRecord
{
/// <summary>
/// 日志记录
/// </summary>
public class LogRecord
{
static string appBaseDir = AppDomain.CurrentDomain.BaseDirectory;
/// <summary>
/// 保存日志
/// </summary>
/// <param name="logStr">string 日志内容</param>
/// <param name="fileName">string 日志文件名</param>
static public void SaveLog(string logStr, string fileName = "")
{
//写文件流
StreamWriter fp = null;
if (fileName == "")
{
//文件名为空则使用但前日期,需要修正
fileName = DateTime.Today.ToShortDateString().Replace("/", "-") + "_log.txt";
}
//日志存于应用程序目录
fileName = appBaseDir + fileName; //".\\" +
//AppendText 文件不存在会自动创建
fp = File.AppendText(fileName);
//使用WriteLine写入内容和时间
fp.WriteLine(logStr + "\r\n" + DateTime.Now.ToString());
//将缓冲区的内容写入文件
fp.Flush();
//关闭rw对象
fp.Close();
}
/// <summary>
/// 字符串两边加单引号
/// </summary>
/// <param name="str">string 待处理字符串</param>
/// <returns>'string'</returns>
public static string QuotedStr(string str)
{
return "'" + str + "'";
}
}
}
在拉一个基类页面

代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FrmLogRecord
{
public partial class ClientOperateForm : Form
{
public ClientOperateForm()
{
InitializeComponent();
}
/// 消息框每行颜色,保证在重绘时能正常显示
protected List<Brush> messageColors = new List<Brush>();
/// <summary>
/// 添加消息
/// </summary>
/// <param name="messageStr">string 消息内容 TODO 如果消息包含回车,应该拆分后再添加</param>
/// <param name="colorBrush">Brush 消息颜色刷,默认为黑色</param>
protected void AddMemoMessage(string messageStr, Brush colorBrush = null)
{
messageColors.Add(colorBrush == null ? Brushes.Red : colorBrush);
memMessage.SelectedIndex = memMessage.Items.Add(messageStr);
}
/// <summary>
/// 添加消息
/// </summary>
/// <param name="messageStr">消息内容</param>
/// <param name="color">Color 消息的颜色,最终会转成Brush</param>
protected void AddMemoMessage(string messageStr, Color color)
{
Brush colorBrush = new SolidBrush(color);
AddMemoMessage(messageStr, colorBrush);
}
/// <summary>
/// 清空消息列表
/// </summary>
protected void ClearMemoMessage()
{
memMessage.Items.Clear();
}
// 消息框的绘制事件,用于实现每行不同颜色
private void memMessage_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground(); //先调用基类实现
if (e.Index < 0 || memMessage.Items.Count <= 0) //formload时return
{
return;
}
else
{
//默认为黑色,避免直接Items.Add()时报错,但不能修正颜色错位
Brush colorBrush = (e.Index >= messageColors.Count ? Brushes.Black : messageColors[e.Index]);
e.Graphics.DrawString(memMessage.Items[e.Index].ToString(), e.Font, colorBrush, e.Bounds);
}
}
}
}
在拉一个页面

代码
using System;
using System.Drawing;
using System.Windows.Forms;
namespace FrmLogRecord
{
public partial class Form1 : ClientOperateForm
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("随便输个数字吧");
return;
}
if (textBox1.Text != "")
{
string sql = "select * from dual";
LogRecord.SaveLog("异常发生在Form1.button1_Click方法中:" + sql);
AddMemoMessage("异常已记录在debug下!");
AddMemoMessage("测试成功!", Color.Blue);
AddMemoMessage("给变量加双引号:"+LogRecord.QuotedStr(textBox1.Text));
}
}
}
}
就这样O了
有问题联系QQ78474580
最好加微信同QQ
一般不上QQ
简单的C#日志记录和弹出提示的更多相关文章
- 基于Jquery 简单实用的弹出提示框
基于Jquery 简单实用的弹出提示框 引言: 原生的 alert 样子看起来很粗暴,网上也有一大堆相关的插件,但是基本上都是大而全,仅仅几句话可以实现的东西,可能要引入好几十k的文件,所以话了点时间 ...
- php 简单通用的日志记录方法
使用file_put_contents 方法来实现简单便捷的日志记录功能 方法1: // use \r\n for new line on windows, just \n on linux func ...
- jquery删除记录弹出提示框
来自于<jquery权威指南> ------------------- 点击删除时,弹出提示框,并做相应的删除确定或取消 完整代码如下: <!DOCTYPE html PUBLIC ...
- 基于AOP和ThreadLocal实现的一个简单Http API日志记录模块
Log4a 基于AOP和ThreadLocal实现的一个简单Http API日志记录模块 github地址 : https://github.com/EalenXie/log4a 在API每次被请求时 ...
- 如果在敲代码的时候eclipse不弹出提示,怎么办?
非常弱智的操作,我们曾经在输入System.out.println("content");的时候,当我们输入了"."之后,在输入错误,此时我们再回退至" ...
- 超链接 a 标签点击时,弹出提示框,可以按照如下来写
onclick="return confirm('确定删除该条记录?')" 加上这条记录后,就可以在访问href属性指向的链接时,有弹出提示
- EF 在controller弹出提示消息
第一种方式: return Content("<script>alert('此名称课程再次班级中已经存在!');window.location.href = 'Course/Cr ...
- android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果
需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果, 总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示 ...
- android标题栏下面弹出提示框(一) TextView实现,带动画效果
产品经理用的是ios手机,于是android就走上了模仿的道路.做这个东西也走了一些弯路,写一篇博客放在这里,以后自己也可用参考,也方便别人学习. 弯路: 1.刚开始本来用PopupWindow去实现 ...
随机推荐
- docker 网络模式 和 端口映射
docker 的 网络模式 docker 自带 3 种 网络模式:分别是bridge网络,host网络,none网络,可以使用 docker network ls 命令查看. 1.none网络 这 ...
- linuxIP地址配置字段说明
虚拟机网络适配器改成桥接 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 设备名称 BOOTPROTO=dhcp /static 自动 ...
- JAVA并发-对象方法wait
最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为java中所有对象的基类,其存在的价值不言而喻,其中wait和notify方法的实现多线程协作提供了保证. ...
- Comet OJ 夏季欢乐赛 Gree的心房
Comet OJ 夏季欢乐赛 Gree的心房 题目传送门 题目描述 据说每一个走进Gree哥哥心房的小姑娘都没有能够再走出来-- 我们将Gree哥哥的心房抽象成一个n \times mn×m的地图,初 ...
- 从一段文字中提取出uri信息
package handle.groupby; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...
- Linux下进程间通信方式——使用消息队列
一.什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法. 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构.我们可以通过发送消息来避免命名管道的 ...
- 洛谷 U96762 小R与三角形 题解
U96762 小R与三角形 原题链接 题目描述 小 R 所在的小镇有 n 个村落,这 n 个村落分布在一个圆周上,这些村落之间两两有直达的小路,小路可能相交,但不存在三条路交于一点.现在小 R 正好放 ...
- 将fasta fastq文件线性化处理
将fasta文件线性化处理 awk '/^>/ {printf("%s%s\t",(N>0?"\n":""),$0);N++;n ...
- C++ new delete 一维数组 二维数组 三维数组
h----------------------------- #include "newandmalloc.h" #include <iostream> using n ...
- Spring Security教程(四)
在前面三个博客的例子中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session ...