I'm new to this forum but I've been reading about how valuable good tenants are. And I've been in the tenant's position before.
I had been a tenant at a house in Los Angeles for five years as I was going to school at USC and starting my career. Well, my landlady and I got along fabulously. My roommates and I paid our rent on time, never caused any problems, and she had problems fixed whenever they came up.
Anyhow, when I moved in, I signed the lease and I know that I read the lease because I always read all of that boring stuff. So I know that I read about having no pets but, at the time, I didn't have pets. So, I guess it just didn't get locked into my brain.
Well, four years later, my neighbor's house got broken into. So, I figured I'd get a dog to protect the place. Honestly, I didn't even check my lease because I just didn't think about it. I always had dogs as a kid and so it's kind of like my default state.
Of course, when checking my lease later after she brought this situation up, sure enough, it was in there.
Anyhow, I told her why I got the dog and she simply told me that I couldn't keep the dog without paying extra and she asked me what I thought was fair. I said "$50 a month?"
She agreed and I was happy... even after she revealed that she would have taken $25 per month.
BTW, since then, when I'm dealing with my best clients or giving refunds, I always ask my clients what they think is fair. I swear that 90% of the time, they're always willing to take less than I'm willing to give. And in the other 10% of the time, most of them agree to my counteroffer.
Anyhow, you certainly should not let him off the hook because that could spiral out of control. But if he's been a good tenant otherwise, maybe explain to him how you value him as a tenant but point out that he's violating his lease.
Then tell him that you can't let him violate his lease without being compensated. And ask him what he thinks is fair.