아래 부분이 수정 되었다.
/// <summary>
/// MethodInvokeEvent V1.0
/// 메서드를 호출한 로그를 남겨야 할 곳에 정의 하면 된다.
/// </summary>
/// <remarks>06.09.13 - ProtoType - 방실</remarks>
/// <remarks>07.04.25 - parametersValue의 타입을 string[] 에서 object[]로 변경 - 방실</remarks>
public sealed class MethodInvokeEvent : WebManagementEvent
{
MethodInverEvents 는 앞에서 아주 간략하게 살펴 보았지만
사용자의 액션을 로깅하기 위한 메서드이다.
앞에 글에서는 실무에서 써본적이 없다고 하였으나..이번 프로젝트에서 써보았다. ㅋ
생각보다 괜찮게 OutPut 이 나온듯 하다.
public int SaveBaseInfoForPositivity(string userName, int orderOrganCode, int objectOrderOrganCode, int? objectGatherOrganCode, string orderOrganOthers, string objectDocNo, DateTime objectGatherDate, bool isGroup, DateTime? birthDate, string birthPlace, string birthAddressCode, string birthAddressDetails, bool isPositivity, bool isEnterNet, int objectId, string detailObjectName, bool? isFromForeign, string incommingPath, string selectedPathogenicIds, string pcr, string rpla, string receiptOthers, out int enternetBaseId, out bool hasAntibioticTest)
{
int result = this.data.SaveBaseInfoForPositivity(userName, orderOrganCode, objectOrderOrganCode, objectGatherOrganCode, orderOrganOthers, objectDocNo, objectGatherDate, isGroup, birthDate, birthPlace, birthAddressCode, birthAddressDetails, isPositivity, isEnterNet, objectId, detailObjectName, isFromForeign, incommingPath, selectedPathogenicIds, pcr, rpla, receiptOthers, out enternetBaseId, out hasAntibioticTest);
MethodInvokeEvent evt = new MethodInvokeEvent(userName, "시험송부입력", this, 100300, "SaveBaseInfoForPositivity", "Int32", new string[24] { "userName", "orderOrganCode", "objectOrderOrganCode", "objectGatherOrganCode", "orderOrganOthers", "objectDocNo", "objectGatherDate", "isGroup", "birthDate", "birthPlace", "birthAddressCode", "birthAddressDetails", "isPositivity", "isEnterNet", "objectId", "detailObjectName", "isFromForeign", "incommingPath", "selectedPathogenicIds", "pcr", "rpla", "receiptOthers", "enternetBaseId", "hasAntibioticTest" }, userName, orderOrganCode, objectOrderOrganCode, objectGatherOrganCode, orderOrganOthers, objectDocNo, objectGatherDate, isGroup, birthDate, birthPlace, birthAddressCode, birthAddressDetails, isPositivity, isEnterNet, objectId, detailObjectName, isFromForeign, incommingPath, selectedPathogenicIds, pcr, rpla, receiptOthers, enternetBaseId, hasAntibioticTest);
evt.Raise();
return result;
}
위 예시는 좀 지저분해 보이지만 실제 써 먹었던 코드이다.
기존의 string[] 보다는 object[]로 하는게 뭐랄까 보여 주고자 하는 정보에 유연성을 줄 수 있다고 판단되어 변경 하였다.
비즈니스계층에서 이런식으로 MethodInvokeEvent 개체를 생성하고 Raise()를 하게 되면 이벤트 로깅이 된다.
로깅이 된 결과는 아래와 같다.
사용자 지정 이벤트 정보:
######--------메서드 정보---------#####
Method Name : SaveBaseInfoForPositivity
Return Type : Int32
######--------파라메터 정보---------#####
userName : test0
orderOrganCode : 1281
objectOrderOrganCode : 1281
objectGatherOrganCode : null
orderOrganOthers : 기타기관1
objectDocNo : dd0705050
objectGatherDate : 2007-05-08 오전 12:00:00
isGroup : False
birthDate : null
birthPlace : null
birthAddressCode : 2623010300
birthAddressDetails : null
isPositivity : True
isEnterNet : True
objectId : 7
detailObjectName : null
isFromForeign : True
incommingPath : null
selectedPathogenicIds : 245
pcr : null
rpla : null
receiptOthers : null
enternetBaseId : 105490
hasAntibioticTest : False
이런식으로 로깅이 Web.config 에서 정의 한 방식대로 (메일이나 sqldb 나 이벤트로그) 저장이 되어 조회가 가능하다.
어떤 사용자가 언제 어떤 인풋으로 어떤 액션을 했는지 로깅을 할 수 있다..